2012-06-07 60 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 
>