添加新列时出错:需要数字/复杂矩阵/矢量参数

时间:2016-03-25 22:48:45

标签: r matrix

我的数据集包含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)))。仍然有相同的错误消息。我怎么能做到这一点?谢谢!

2 个答案:

答案 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检查characterclass()。同一矩阵中不能存在多个类。

数据帧反而没有这个问题。如果可以预期列(变量)具有不同类型(数字/字符/逻辑等),则使用数据框。

当您想要数学运算时,矩阵更好。如果您的列通常具有您使用的名称(例如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从数据框转换为矩阵时,只需注意强制:它会返回通过将数据框的所有变量转换为数字模式然后将它们绑定在一起而获得的矩阵作为矩阵的列。

相关问题