基于另一数据帧中的信息从数据帧中提取系数

时间:2012-06-07 19:17:23

标签: r

现在我在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

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

我需要应用这些系数,通过将coef中的行名和列名与数据$ a和数据$ p相匹配,将这些系数乘以数据$ i中的值。

换句话说,对于数据中的每一行,我需要为每一行使用数据$ a和数据$ p从coef中提取一个特定的数字,该数字将乘以该行的数据$ 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数据框中的因子,但我不确定从那里去哪里。

提前致谢,

伊恩

1 个答案:

答案 0 :(得分:2)

如果您订购coef data.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
>