![](/img/trans.png)
[英]Using data in one data.frame to generate values for a new column in another data.frame in R
[英]Multiply column values in one data.frame by column in another data.frame on a condition in R
我在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列,這些列是該comp的所有狀態的平均值。
因此,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
這可能嗎? 我試圖將ddply與var1的平均值一起使用,並按comp和year進行匯總,但這是行不通的。 我最終每年每場比賽要排一排以上。
提前致謝。 這與我的問題最相似,但是在第二個數據集中沒有顯示條件。 數據幀的各個子集乘以不同的向量
請指教。
我希望通過將其分成幾個部分,可以找出為什么我的結果看起來與您的預測不同的原因:
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
似乎可以匹配“ var1”條目了,我希望您只是對“ var2”有所猜想。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.