有没有办法让列保持其前面所有列的运行总计?

时间:2012-02-24 03:33:20

标签: r

如果我有一个数据框我要添加列,我想要一列来总结它们。我不会提前知道列的名称,所以我想我需要一些能够计算列数然后总结它们的函数。

如果我的数据是这样的:

w=1:10
x=11:20
z=data.frame(w,x)

我想要z$wz$x的总和。但是如果我要添加z$y,我希望将其纳入总和中。

2 个答案:

答案 0 :(得分:2)

您应该考虑不为总和添加列,只需在需要时调用rowSums(z)即可。这样就无需在修改data.frame时更新列的麻烦。

现在,如果这真的是你想要的,这里有一个小函数,它将更新总和并始终将其保留为最后一列。每次对data.frame进行更改时都必须运行它:

> refresh.total <- function(df) {
+     df$total <- NULL
+     df$total <- rowSums(df)
+     return(df)
+ }
> 
> z <- refresh.total(z)
> z
    w  x total
1   1 11    12
2   2 12    14
3   3 13    16
4   4 14    18
5   5 15    20
6   6 16    22
7   7 17    24
8   8 18    26
9   9 19    28
10 10 20    30
> 
> z$y <- 2:11
> z <- refresh.total(z)
> z
    w  x  y total
1   1 11  2    14
2   2 12  3    17
3   3 13  4    20
4   4 14  5    23
5   5 15  6    26
6   6 16  7    29
7   7 17  8    32
8   8 18  9    35
9   9 19 10    38
10 10 20 11    41

答案 1 :(得分:1)

在您完成所有列的添加后,您可以执行以下操作:

z$total <- rowSums(z)