2012-06-07 41 views
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 

这些数据帧被连接为在数据$一个的每个值对应于COEF和数据$ p的列名称对应在COEF到行名称。

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

换句话说,对于数据中的每一行,我需要为每一行使用数据$ a和data $ 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数据帧的因素,但我不能确定在哪里从那里去。

由于提前,

伊恩

回答

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 
>