R语言dplyr按分组统计多变量唯一值数量(全NA返回NA)
R语言分组计算多列唯一值数量实现
直接用dplyr的管道操作组合函数就能实现需求,完整代码如下:
# 加载dplyr包 library(dplyr) # 统计计算逻辑 agg_result <- your_dataframe %>% # 按指定四个字段的唯一值组合分组 group_by(NAME_0, year, standardmeasure, resource) %>% # 批量对四个目标字段做统计 summarise( across( # 选定需要计算唯一值的四个字段 c(comtrade_price_mult, wb_price_mult, usgs_price_mult, multicolour_price_mult), # 适配缺失值规则:全NA返回NA,否则排除NA后统计唯一值数量 ~ if (all(is.na(.))) NA_integer_ else n_distinct(., na.rm = TRUE), # 统计结果列命名规则:原字段名加_distinct_count后缀 .names = "{.col}_distinct_count" ), # 计算完成后自动解除分组状态,避免影响后续操作 .groups = "drop" )
逻辑说明
- 分组逻辑完全匹配需求,
group_by()会自动识别四个传入字段的所有唯一值组合拆分数据块 - 用
across()批量处理四个目标字段,无需重复编写相同统计逻辑,代码简洁易维护 - 缺失值规则适配:先判断分组内当前列是否全部为NA,是则直接返回NA;否则调用
n_distinct()时传入na.rm = TRUE排除NA值后统计唯一值数量,不会把NA算作一个有效取值 - 最终输出为tibble格式(兼容data.frame),每一行对应一个唯一分组,列包含四个分组字段+四个字段的唯一值统计结果,符合常规统计结果输出结构。
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

