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