2012-03-09 80 views
0

我試圖根據每個列中的值合併r中的兩個數據框。在R中的一個條件乘以另一個data.frame中列的一個data.frame中的列值

df1=data.frame(comp=c("comp1", "comp2", "comp3","comp1"), 
state1=c(1,0,0,1), 
state2=c(1,1,0,1), 
state3=c(0,1,1,0), 
state4=c(0,0,1,0),year=c(1,1,1,2)) 

    comp state1 state2 state3 state4 year 
1 comp1  1  1  0  0 1 
2 comp2  0  1  1  0 1 
3 comp3  0  0  1  1 1 
4 comp1  1  1  0  0 2 

df2=data.frame(state=c("state1","state2", "state3", "state4", 
         "state1","state2", "state3", "state4"), 
var1=c(1,0,0,1,0,0,1,1), 
var2=c(0,1,0,0,0,1,1,0), 
year=c(1,1,1,1,2,2,2,2)) 

DF2

state var1 var2 year 
1 state1 1 0 1 
2 state2 0 1 1 
3 state3 0 0 1 
4 state4 1 0 1 
5 state1 0 1 2 
6 state2 0 1 2 
7 state3 1 1 2 
8 state4 1 0 2 

我想追加列DF1是VAR1,VAR2這對於補償所有國家的平均值。因此,對於comp1,var1應該是1 * 1 + 1 * 0 + 0 * 0 + 0 * 1 /(1 + 1)或state * var/sum(comp的狀態)。

DF3會是什麼樣子:

  state1 state2 state3 state4 year var1 var2 
    1 comp1 1  1  0  0  1 0.5 0.5 
    2 comp2 0  1  1  0  1 0.0 0.5 
    3 comp3 0  0  1  1  1 0.5 0.0 
    4 comp1 1  1  0  0  2 0.5 1.0 

這可能嗎?我試着用平均值爲var1的ddply,按comp和year來總結,但這不起作用。每年最終我會得到不止一行。

在此先感謝。 這一個與我的問題最相似,但它沒有在第二個數據集中顯示條件。 Multiply various subsets of a data frame by different vectors

請指教。

回答

1

我的希望是,通過打破成段這個你可以找出爲什麼我的結果看起來比你的預測不同:

df3 <- matrix(NA, ncol=2, nrow=nrow(df1)) 
for (i in seq(nrow(df1))) { 
    df3[i, 1] <- sum(df2[ df2$year==df1$year[i], "var1"] * df1[i, 2:5]) 
    df3[i, 2] <- sum(df2[ df2$year==df1$year[i], "var2"] * df1[i, 2:5]) 
} 
m4<-df3/rowSums(df1[2:5]) 
cbind(df1, m4) 
#--------------- 
    comp state1 state2 state3 state4 year 1   2 
1 comp1  1  1  0  0 1 0.5 0.5000000 
2 comp2  0  1  1  0 1 0.0 0.3333333 
3 comp3  0  0  1  1 1 0.5 0.0000000 
4 comp1  1  1  0  0 2 0.0 0.3333333 

似乎匹配OK的「VAR1」的條目,我希望你只扔了一些「var2」的猜測。

+0

謝謝。我只是猜測Var2的一些猜測。我試圖重現你的結果,我得到:錯誤在df3 [i,1] < - sum(df2 [df2 $ year == df1 $ year [i],「var1」] * df1 [i,: 對象'df3'沒有找到 – jessi 2012-03-09 20:49:57

+0

原來的'm3'應該是'df3',我會修復它,如果沒有其他人首先得到它。另外,我認爲該行應該是'm4 <-df3/rowSums(df1 [2:5])'如果我理解你的分母計算 – 2012-03-09 21:02:13

+0

這是一個簡單的解決方案,我真的很感謝你爲我設置這個,我認爲順序可能很重要,所以我認爲我需要整理我的原始數據以反映例如。再次感謝 – jessi 2012-03-09 21:08:56

相關問題