计算某一行的列总和

时间:2016-12-21 09:34:11

标签: r sum

我正在尝试使用以下代码计算每行每5行的列总和:

df <- data.frame(count=1:10)

for (loop in (1:nrow(df)))
{df[loop,"acc_sum"] <- sum(df[max(1,loop-5):loop,"count"])}

但是我不喜欢这里的显式循环,我该如何修改呢?感谢。

1 个答案:

答案 0 :(得分:0)

根据您的问题,您希望得到的结果是:

df
#    count acc_sum
# 1      1       1
# 2      2       3
# 3      3       6
# 4      4      10
# 5      5      15
# 6      6      21
# 7      7      27
# 8      8      33
# 9      9      39
# 10    10      45

这可以这样做:

df <- data.frame(count=1:10)

library(zoo)

df$acc_sum <- rev(rollapply(rev(df$count), 6, sum, partial = TRUE, align = "left"))

要获得此结果,我们正在颠倒df$count的顺序,我们对元素求和(使用partial = TRUEalign = "left"在这里很重要),我们将结果反转为需要矢量。

rev(rollapply(rev(df$count), 6, sum, partial = TRUE, align = "left"))
# [1]  1  3  6 10 15 21 27 33 39 45

请注意,这总共6个元素,而不是5.根据您问题中的代码,这给出了相同的输出。如果你只想总计5行,只需用5替换6。