我的数据集包含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 WRMA + 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 :(得分: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
答案 1 :(得分:1)
您可以将数据集构建为矩阵或数据框:
数据帧:
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
它们之间的主要区别在于,矩阵只能容纳一类数据。例如,每个观察必须使用函数numeric
检查character
或class()
。同一矩阵中不能存在多个类。
数据帧反而没有这个问题。如果可以预期列(变量)具有不同类型(数字/字符/逻辑等),则使用数据框。
当您想要数学运算时,矩阵更好。如果您的列通常具有您使用的名称(例如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
从数据框转换为矩阵时,只需注意强制:它会返回通过将数据框的所有变量转换为数字模式然后将它们绑定在一起而获得的矩阵作为矩阵的列。