2016-03-25 49 views
0

我的數據集包含6家公司看起來像下面的月度回報率(但有更多行):錯誤:需要數字/複雜的矩陣/矢量參數

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

這些公司組成的投資組合。結果,每一個都有它的重量。

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

我想要做的就是創建一個名爲GWMR列,它= RMA X水資源管理局+ RMB X WRMB + ... + RMF X WRMF。

這裏就是我所做的:

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

然後我得到的錯誤信息:Error in GAA2 %*% weights : requires numeric/complex matrix/vector arguments

我也試過:GAA <- cbind(GAA, GWMR = c(GAA2 %*% as.matrix(weights)))。仍然有相同的錯誤信息。我該如何解決這個問題?謝謝!

+0

是你的數據集是一個data.frame對象嗎?你可以用函數class()來控制它。 – Worice

回答

0

你可以建立數據集作爲一個矩陣或數據框:

數據框:

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

在這種情況下,你可以通過添加列

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

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

矩陣:

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

對於一個矩陣,你應該:

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 

它們之間的主要區別,在幾句話,是一個矩陣只能容納一類的數據。例如,每個觀察必須是numericcharacter與功能class()檢查。不止一個類不能存在於同一個矩陣中。

Dataframes改爲沒有這個問題。如果列(變量)預期爲不同類型(數字/字符/邏輯等),則使用數據框。

如果要進行數學運算,矩陣更好。如果您的列經常使用您使用的名稱(例如,df$var2),則數據框可能更有用。您可以轉換矩陣中的數據幀,並將數據幀的標題保存在矩陣中。請記住一個區別:您可以使用mean(df$var2)在第二列執行操作(您的意思是數據框)。使用矩陣時,必須使用索引mean(mx2[, 2])

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" 

當從數據幀轉換與as.matrix到矩陣,只是知道脅迫的:它返回由你的數據框的所有變量轉換爲數字模式,然後結合在一起作爲一個列所得的矩陣矩陣。

+0

感謝您的解釋。在我的情況下,即使每列都有一個標題,我仍然可以將數據集轉換爲矩陣嗎?我對R很新,所以對於基本問題感到抱歉。 –

+0

沒關係,別擔心。我們在這裏互相幫助,爲了以最好的方式做到這一點,我建議你檢查一下[指導方針](http://stackoverflow.com/help/how-to-ask),它總是有用的。無論如何,您的數據框的標題將保留在矩陣中,正如您在上面的答案中插入的示例中所見。 – Worice

1

使用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