【问题标题】:Finding the highest sum of consecutive non-zero numbers by group in R在R中按组查找连续非零数的最大总和
【发布时间】:2021-02-04 18:41:32
【问题描述】:

我有一长串分组观察的结果。数据集如下所示:

df <- data.frame (ID = c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3),
                  EV = c(0,0,3,2,3,0,1,1,1,2,0,0,1,0,0,0,4,5,1,2,0,2,2,2,2))

ID #1 显示两个连续的非零数字系列,3-2-3 和 1-1。 3-2-3 的总和高于 1-1,我想要 8。ID #2 有 1-2 和 1,因此正确的结果是 3。ID #3 有 4-5-1-2 和 2- 2-2-2,所以想要的结果是 12。

我想像这里一样输出一个数据框;

  ID RE
1  1  8
2  2  3
3  3 12

提前致谢。

【问题讨论】:

  • 请更准确地说明您定义为连续数字的内容。我认为你真正的意思是没有零的序列。
  • @deschen 没错。我相应地更正了文本。感谢您的澄清。

标签: r dplyr aggregate


【解决方案1】:

我有一个data.table 方法。

library( data.table )
#make it a data.table
setDT(df)
#make groups based on group == 0 and get their sums
ans <- df[, .(sum = sum(EV)), by = .(ID, rleid( ID, EV == 0 ) ) ]
#get the maximum sum for each ID, and drop the rleid column created in the previous row
ans[ ans[, .I[sum == max(sum)], by=.(ID)]$V1][, rleid := NULL][]
#    ID sum
# 1:  1   8
# 2:  2   3
# 3:  3  12

【讨论】:

  • 谢谢。它解决了我的问题。我想我需要研究 data.table 方法。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2015-07-27
  • 2016-03-24
  • 2013-09-13
  • 2011-05-28
  • 2018-01-19
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
相关资源
最近更新 更多