在R中基于条件使用dplyr::summarize()统计族群选择数量
解决方法:统计指定族群的选中数量(排除Ethinc_overall为"B"的行)
要实现你的需求,我们可以结合dplyr的filter()和summarize()函数,再用across()批量处理目标列,代码简洁高效:
library(tidyverse) # 过滤掉Ethinc_overall为"B"的行,然后统计指定列中"Y"的数量 result <- DATA %>% filter(Ethinc_overall != "B") %>% summarize( across( cols = c(Hispanic, AmIndian, Asian, White, Pacific, AsiaPacific), ~ sum(.x == "Y", na.rm = TRUE), .names = "count_{.col}" ) ) # 查看结果 print(result)
代码说明:
filter(Ethinc_overall != "B"):筛选出Ethinc_overall不等于"B"的所有行summarize():生成汇总统计结果across():批量处理指定的6个族群列,cols参数明确要统计的列名~ sum(.x == "Y", na.rm = TRUE):对每一列统计值为"Y"的行数(na.rm=TRUE避免空值干扰,即使当前数据无空值也建议保留).names = "count_{.col}":给统计结果列名添加前缀,比如count_Hispanic,更直观区分统计项
运行结果示例:
执行后会得到一个汇总数据框,每一列对应一个族群的"Y"数量,示例输出如下:
count_Hispanic count_AmIndian count_Asian count_White count_Pacific count_AsiaPacific 1 12 3 11 4 3 4
内容的提问来源于stack exchange,提问作者Simon Harmel
相关产品推荐
相关产品推荐

