如何用dplyr汇总R中含布尔列的表格:统计组间条目存在情况
基于dplyr的分组存在性统计方案
问题需求
现有一个包含3列的数据集:
- 第一列
groupA为字符型条目 - 第二列
groupB、第三列groupC为布尔向量,分别表示对应groupA条目是否存在于groupB和groupC中
需要汇总统计groupA条目在B、C中四种状态的数量:
- 同时不存在于B和C
- 同时存在于B和C
- 仅存在于B
- 仅存在于C
要求使用dplyr实现,原数据量达上万条。
示例数据
example <- data.frame( groupA = c('shshs', 'ihdfeowf', 'woefiewfh', 'awofjqweofj', 'hdhd', 'dudj'), groupB = c(T, T ,F, F, T, F), groupC = c(T, F, F, T, T, T)) # 预期输出(注:原预期结果中groupA列实际为对应状态的条目数量,此处改为count列更清晰) expected_result <- data.frame( count = c(1, 2, 1, 2), groupB = c(F, T, T, F), groupC = c(F, T, F, T))
dplyr实现方案
通过按groupB和groupC的布尔组合分组,统计每组的条目数量即可完成需求:
library(dplyr) # 执行统计 result <- example %>% group_by(groupB, groupC) %>% summarize(count = n(), .groups = "drop") %>% arrange(groupB, groupC) # 可选:调整结果顺序与预期一致
方案说明
group_by(groupB, groupC):将数据按B、C的存在状态组合分组,自动覆盖四种可能的布尔组合summarize(count = n()):统计每组的条目数量,n()返回当前组的行数.groups = "drop":分组后取消分组状态,避免后续操作受分组影响arrange():可选步骤,用于调整结果行的顺序,使其与预期输出匹配
该方案效率优异,即使处理上万条数据也能快速完成,符合大数据集的处理需求。
内容的提问来源于stack exchange,提问作者Sebastian Hesse
相关产品推荐
相关产品推荐

