我正在尝试使用以下代码计算每行每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"])}
但是我不喜欢这里的显式循环,我该如何修改呢?感谢。
答案 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 = TRUE
和align = "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。