【发布时间】:2012-03-27 04:43:50
【问题描述】:
我在 r 中有两个数据框,我试图根据每个数据框的列中的值进行组合。
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(state for 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
这可能吗?我尝试将 ddply 与 var1 的平均值一起使用,按 comp 和 year 进行总结,但这不起作用。我最终每年每个比赛都会有不止一行。
提前致谢。 这与我的问题最相似,但它没有在第二个数据集中显示条件。 Multiply various subsets of a data frame by different vectors
请指教。
【问题讨论】: