使用R统计信息为每一行添加一个组和

时间:2013-07-19 14:44:08

标签: r

我有数据框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)

但这会引发警告错误,因为它只给我每组的总和。

3 个答案:

答案 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]) } )