如何使用dplyr实现按分组取每组最后两行并对指定字段求和
解决方案
你可以使用dplyr提供的slice_tail()函数快速提取每个分组的最后两行,调整后的代码如下:
library(dplyr) data %>% group_by(Company) %>% slice_tail(n = 2) %>% summarise(Sum = sum(Revenue))
执行上述代码后即可得到你需要的输出结果。
注意事项
如果你的数据集行顺序可能发生变动,建议先按照确定的排序规则(如记录生成时间、自增序号等)排序后再执行筛选逻辑,避免“最后两行”的定义不符合预期,示例如下:
data %>% arrange(排序字段) %>% # 替换为你实际用于确定顺序的字段 group_by(Company) %>% slice_tail(n = 2) %>% summarise(Sum = sum(Revenue))
旧版本兼容写法
如果你使用的dplyr版本较低不支持slice_tail(),可以通过行号判断实现相同效果:
data %>% group_by(Company) %>% filter(row_number() > n() - 2) %>% summarise(Sum = sum(Revenue))
这里n()返回当前分组的总行数,row_number()返回当前行在分组内的行号,筛选条件会保留分组内的最后两行。
内容的提问来源于stack exchange,提问作者passcot
相关产品推荐
相关产品推荐

