按NAME分组求和MONEY时,如何保留DataFrame的其他列?
分组求和并保留所有列的解决方案
在dplyr中,summarise()的作用是聚合分组数据,仅返回分组列和你定义的聚合列,因此会丢失其他列。要实现分组求和同时保留所有列,有两种常用方法:
方法1:用mutate()替代summarise()
mutate()会在原数据框基础上新增求和列,不会删除任何原有列。每个分组的求和结果会对应填充到该组的每一行:
money = money %>% group_by(NAME) %>% mutate(SUM_MONEY = sum(MONEY)) %>% ungroup() # 可选,取消数据框的分组状态
方法2:分组内其他列值一致时,在summarise()中显式保留这些列
如果同一NAME分组下的其他列(比如年龄、性别等)值完全相同,可以用first()/last()等函数提取组内该列的固定值,和求和结果一起返回:
# 假设需要保留的其他列是AGE、GENDER money = money %>% group_by(NAME) %>% summarise( SUM_MONEY = sum(MONEY), AGE = first(AGE), GENDER = first(GENDER), .groups = "drop" # 取消分组,返回普通数据框 )
注意:如果分组内其他列存在不同值,方法2会丢失部分数据,此时优先选择方法1。
内容的提问来源于stack exchange,提问作者Lucas Esteves
相关产品推荐
相关产品推荐

