我有数据框df
,如:
key entry x1
1 1 0.2
1 2 0.1
1 3 0.5
1 4 0.6
2 1 0.2
2 2 0.1
2 3 0.7
2 4 0.3
每个组都由key
定义,并且具有相同数量的entry
值。我想保留这个表结构供以后使用。我需要添加一个名为sumx1
的新列,以便每行与该行关联的键组的总和为x1
。
在上面的例子中,密钥组1的总和将是0.2 + 0.1 + 0.5 + 0.6 = 1.4所以在名为sumx1
的新列中,我需要为每个密钥为1的行输入1.4。 / p>
我试过了:
df["sumx1"] <- NA
df$sumx1 <- aggregate(df$sumx1, list(key=df$key), sum)
但这会引发警告错误,因为它只给我每组的总和。
答案 0 :(得分:7)
使用ave
:
df$sumx1 <- ave(df$x1, df$key, FUN=sum)
答案 1 :(得分:2)
此类数据争论的首选方案是plyr
。
require(plyr)
ddply(df, .(key), transform, sumx1=sum(x1))
答案 2 :(得分:0)
df <- data.frame(
key=c(1, 1, 1, 1, 2, 2, 2, 2),
entry=c(1, 2, 3, 4, 1, 2, 3, 4),
x1=c(0.2, 0.1, 0.5, 0.6, 0.2, 0.1, 0.7, 0.3))
df$sumx1 <- sapply( df$key, function(key) { sum(df$x1[df$key==key]) } )