dplyr分组汇总:.groups='keep'后ungroup与直接'drop'的区别
按个体汇总工资的代码正确性与分组疑问
两种代码写法的正确性
两种写法都是正确的。它们都完成了核心需求:
- 将所有NA值替换为0
- 按
nquest(家庭编码)和nord(家庭成员位置)的组合(唯一标识个体)分组 - 对每个个体的工资
tpens求和
最终都能得到每行对应一个个体、包含该个体总工资的数据集。
.groups='keep' + ungroup 与 .groups='drop' 的区别
- 直接用
.groups='drop':执行summarize后会直接移除所有分组信息,返回无分组的tibble,不需要额外调用ungroup()。 - 用
.groups='keep'再加ungroup():summarize后会保留原有的分组结构(即按nquest和nord分组的状态),此时数据仍处于分组状态;必须调用ungroup()才能彻底移除所有分组。
这两种写法最终得到的数据内容完全一致,唯一差异是中间过程的分组状态,但最终结果的分组状态是相同的(均无分组)。
合并后仍显示分组的原因
出现这种情况通常是因为:
- 你合并的另一个数据集本身带有分组属性,合并操作会继承该分组状态
- 合并前的某个数据集没有完全移除分组(比如第二种写法漏写了
ungroup(),或者合并的其他数据存在分组)
解决办法:在合并操作前,对所有参与合并的数据集都执行ungroup(),确保它们都是无分组状态,合并后就不会再显示分组标识了。
内容的提问来源于stack exchange,提问作者io_boh
相关产品推荐
相关产品推荐

