2016-03-25 11 views
0

kompleks/sayısal matris/vektör argümanlar gerektirir (ama sahip çok daha fazla satır):Hata: My veri seti 6 şirket aşağıda benziyor aylık getiriler içeren

RMA RMB RMC  RMD  RME  RMF 
NA NA NA  0.0099 -0.0009 NA 
NA NA 0.0395 -0.0030 0.0024 NA 

Bu şirketler oluşur portföy. Sonuç olarak, her birinin ağırlığı vardır. Ben bunu yapmaya çalışıyorum ne

WRMA <- 0.36 
WRMB <- 0.12 
WRMC <- 0.11 
WRMD <- 0.24 
WRME <- 0.15 
WRMF <- 0.02 

RMA x WRMA + RMB x WRMB = GWMR adlı bir sütun, yaratmaktır + ... + RMF'nin x WRMF.

İşte ne yaptım: Error in GAA2 %*% weights : requires numeric/complex matrix/vector arguments

Ben de denedim: GAA <- cbind(GAA, GWMR = c(GAA2 %*% as.matrix(weights)))

weights <- c(WRMA,WRMB,WRMC,WRMD,WRME,WRMF) 
GAA2 <- GAA 
GAA2[is.na(GAA2] <- 0 
GAA <- cbind(GAA, GWMR = c(GAA2 %*% weights)) 

Sonra hata mesajı var. Hala aynı hata mesajını aldım. Bunu nasıl doğru yapabilirim? Teşekkürler!

+0

Veri kümeniz bir data.frame nesnesi mi?'Class()' işleviyle kontrol edebilirsiniz. – Worice

cevap

0

:

Dataframe:

:

Bu durumda
df <- data.frame(var1 = c(1:5)) 

, yanından bir sütun ekleyebilir

df$var2 <- c(6:10) 
df 

    var1 var2 
1 1 6 
2 2 7 
3 3 8 
4 4 9 
5 5 10 

Matris: Bir matris için

mx <- matrix(1:12, 4, 3) 

şunları yapmalısınız:

mx <- cbind(mx, 13:16) 
mx 

    [,1] [,2] [,3] [,4] 
[1,] 1 5 9 13 
[2,] 2 6 10 14 
[3,] 3 7 11 15 
[4,] 4 8 12 16 

aralarındaki temel fark, birkaç kelimeyle, bir matris verilerinin yalnızca bir sınıf tutabilir olmasıdır. Örneğin, her gözlem numeric olmalıdır veya characterclass() işleviyle kontrol edilir. Aynı matriste birden fazla sınıf mevcut olamaz.

Bunun yerine Datafram'lar bu sorunu değil. Sütunlar (değişkenler) farklı türlerde (sayısal/karakter/mantıksal vb.) Olması beklenebilirse veri çerçevelerini kullanırsınız.

Matrisler, matematik işlemlerini yapmak istediğinizde daha iyidir. Sütunlarınız sık kullandığınız adlara sahipse, veri çerçeveleri daha yararlı olabilir (es. df$var2)

Bir veri çerçevesini bir matristeki dönüştürebilirsiniz ve veri çerçevesinin başlıkları matrise kaydedilir. Lütfen bir farkı hatırlayın: bir veri karesini mean(df$var2) ile ikinci sütunda bir işlem (ortalama) yapabilirsiniz. Bir matrisle, mean(mx2[, 2]) dizinlemesini kullanmanız gerekir.

mx2 <- as.matrix(df) 
mx2 
    var1 var2 
[1,] 1 6 
[2,] 2 7 
[3,] 3 8 
[4,] 4 9 
[5,] 5 10 

class(mx2) 
"matrix" 

sadece zorlama farkında, as.matrix ile matrix dataframe dönüştürme: Bir sütun olarak onları birlikte bağlayıcı sonra sayısal moduna senin dataframe tüm değişkenleri dönüştürerek ve elde edilen matris döndüren matris.

+0

Açıklamanız için teşekkürler. Benim durumumda, her sütunun bir başlığı olduğunda bile veri kümemi matrise dönüştürebilir miyim? Temel soru için çok üzgünüm R için çok yeni. –

+0

Tamam, endişelenmeyin. Birbirimize yardım etmek için buradayız ve bunu en iyi şekilde yapabilmek için, her zaman yararlı olan [yönergeleri] (http://stackoverflow.com/help/how-to-ask) kontrol etmenizi öneririm . Her neyse, yukarıdaki veriye eklediğim örnekte gördüğünüz gibi, veri çerçevenizin başlıkları matriste kalır. – Worice

1

Kullanım as.matrix

GAA <- cbind(GAA, GWMR = c(as.matrix(GAA2) %*% weights)) 
GAA 
    RMA RMB RMC  RMD  RME RMF  GWMR 
1 0 0 0.0000 0.0099 -0.0009 0 0.002241 
2 0 0 0.0395 -0.0030 0.0024 0 0.003985 
Bir matris veya bir dataframe olarak veri kümesini inşa edebilirsiniz