现在我在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数据框中的因子,但我不确定从那里去哪里。
提前致谢,
伊恩
答案 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
>