2

我有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。

我试过了:

df["sumx1"] <- NA
df$sumx1 <- aggregate(df$sumx1, list(key=df$key), sum)

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

4

3 回答 3

7

使用ave

 df$sumx1 <- ave(df$x1, df$key, FUN=sum)
于 2013-07-19T14:51:13.490 回答
2

这种数据整理的首选包是plyr.

require(plyr)
ddply(df, .(key), transform, sumx1=sum(x1))
于 2013-07-19T14:52:18.387 回答
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]) } )
于 2013-07-19T14:56:36.867 回答