R语言中按行内1的数量统计数据的高效实现方法求助
高效统计二元列中指定1的数量的出现次数
核心思路
不用逐个组合编写筛选逻辑,先计算每行目标二元列里值为1的数量,再按该数量分组统计次数,同时筛选ace1为指定值的行,一步完成所有统计需求。
实现代码
library(dplyr) # 替换为你实际的9个二元变量列名 binary_cols <- c("ace3", "ace4", "ace5", "ace6", "ace7", "ace8", "ace9", "ace10", "ace2") result <- ALL_STATES_TBL %>% # 一次性筛选ace1为3或4的行 filter(ace1 %in% c("3", "4")) %>% # 计算每行二元列中值为"1"的数量(若1是数值型,改为.x == 1) mutate(num_ones = rowSums(across(all_of(binary_cols), ~ .x == "1"))) %>% # 按1的个数分组,统计出现次数 count(num_ones, name = "occurrences")
代码说明
- 列名定义:
binary_cols需准确覆盖所有要统计的二元变量列,确保没有遗漏。 - 行筛选:用
%in%一次性匹配ace1的多个目标值,替代多次filter加rbind的冗余操作。 - 数量计算:
rowSums配合across高效遍历每行,自动统计符合条件的列数,无需手动编写每列的判断逻辑。 - 次数统计:
count函数直接按num_ones分组,输出每个数量对应的出现次数,结果会包含0到9的所有可能数量(如果存在对应行)。
结果示例
输出的result数据框结构如下:
| num_ones | occurrences |
|---|---|
| 0 | 120 |
| 1 | 250 |
| 2 | 180 |
| ... | ... |
内容的提问来源于stack exchange,提问作者Ivey
相关产品推荐
相关产品推荐

