【问题标题】:calculating column sum for certain row计算某行的列总和
【发布时间】:2016-12-21 17:53:02
【问题描述】:

我正在尝试使用以下代码在 R 中计算每行每 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"])}

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

【问题讨论】:

  • zoo::rollsum(df$count,6, align="right", fill=NA)
  • @Khashaa 谢谢,rollsum 有效。

标签: r sum


【解决方案1】:

根据您的问题,您想要的结果是:

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 行求和,只需将 6 替换为 5。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多