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
請指教。
謝謝。我只是猜測Var2的一些猜測。我試圖重現你的結果,我得到:錯誤在df3 [i,1] < - sum(df2 [df2 $ year == df1 $ year [i],「var1」] * df1 [i,: 對象'df3'沒有找到 – jessi 2012-03-09 20:49:57
原來的'm3'應該是'df3',我會修復它,如果沒有其他人首先得到它。另外,我認爲該行應該是'm4 <-df3/rowSums(df1 [2:5])'如果我理解你的分母計算 – 2012-03-09 21:02:13
這是一個簡單的解決方案,我真的很感謝你爲我設置這個,我認爲順序可能很重要,所以我認爲我需要整理我的原始數據以反映例如。再次感謝 – jessi 2012-03-09 21:08:56