我有一长串的结果,从小组的连续观察。数据集如下所示:
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,因此期望的结果是12。
我想要一个数据作为输出,像这里;
ID RE
1 1 8
2 2 3
3 3 12提前谢谢。
发布于 2021-02-04 19:32:47
我有一个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 12https://stackoverflow.com/questions/66051817
复制相似问题