3

现在我在 R 中有两个数据框,包含一些看起来像这样的数据:

> data
  p a         i
1 1 1 2.2561469
2 5 2 0.2316390
3 2 3 0.4867456
4 3 1 0.1511705
5 4 2 0.8838884

其中一个包含如下所示的系数:

> coef
         3        2        1
1 29420.50 31029.75 29941.96
2 26915.00 27881.00 27050.00
3 27756.00 28904.00 28699.40
4 28345.33 29802.33 28377.56
5 28217.00 29409.00 28738.67

这些数据框连接在一起,因为 data$a 中的每个值对应于 coef 中的列名,而 data$p 对应于 coef 中的行名。

我需要应用这些系数将这些系数乘以 data$i 中的值,方法是将 coef 中的行名和列名与 data$a 和 data$p 匹配。

换句话说,对于数据中的每一行,我需要为每一行使用 data$a 和 data$p 从 coef 中提取一个特定数字,该数字将乘以该行的 data$i 的值以创建一个新向量在看起来像这样的数据中:

> data
  p a         i          z
1 1 1 2.2561469      67553
2 5 2 0.2316390       6812
3 2 3 0.4867456         .
4 3 1 0.1511705         .
5 4 2 0.8838884         .

我在想我应该根据行名和列名在我的 coef 数据框中创建因子,但不确定从那里去哪里。

提前致谢,

伊恩

4

1 回答 1

2

如果您订购coefdata.frame,您可以只索引它们,就好像列名不存在一样。

coef <- coef[,order(names(coef))]

然后apply对每一行执行一个函数:

myfun <- function(x) {
  x[3]*coef[x[1], x[2]]
}

data$z <- apply(data, 1, myfun)

> data
  p a         i         z
1 1 1 2.2561469 67553.460
2 5 2 0.2316390  6812.271
3 2 3 0.4867456 13100.758
4 3 1 0.1511705  4338.503
5 4 2 0.8838884 26341.934
> 
于 2012-06-07T19:32:38.843 回答