You need to enable JavaScript to run this app. R语言统计三个CODE变量各取值对应总人数的简化实现方法
优惠活动
大模型
产品
解决方案
定价
更多

R语言统计三个CODE变量各取值对应总人数的简化实现方法

R语言多列分组统计简化方案

下面给出两种更简洁的实现方式,都能直接得到你要的统计结果:

方法1:tidyverse 流式实现(扩展性强)

适合后续CODE列数量有变化的场景,只需要调整列匹配规则即可,不需要修改统计逻辑:

library(dplyr)
library(tidyr)

result <- data %>%
  # 为每条记录生成唯一标识
  mutate(row_id = row_number()) %>%
  # 将三个CODE列转换为长格式
  pivot_longer(cols = starts_with("CODE_"), values_to = "code_val") %>%
  # 过滤掉无效值9
  filter(code_val != 9) %>%
  # 同一条记录的相同CODE只保留1次,避免重复计数
  distinct(row_id, code_val) %>%
  # 统计每个CODE对应的记录数
  count(code_val, name = "Sum") %>%
  # 生成分组名称
  mutate(Group = paste0("Group_", code_val)) %>%
  select(Group, Sum) %>%
  # 补充全9的缺失组统计结果
  bind_rows(data.frame(
    Group = "Missing",
    Sum = sum(apply(data[, paste0("CODE_", 1:3)], 1, \(x) all(x == 9)))
  ))

方法2:base R 实现(无额外依赖)

不需要加载额外包,代码更短,运行速度更快:

# 统计1-6每个分组的人数
group_sum <- sapply(1:6, \(val) {
  sum(apply(data[, paste0("CODE_", 1:3)], 1, \(row) val %in% row))
})
# 统计全9缺失组的人数
missing_sum <- sum(apply(data[, paste0("CODE_", 1:3)], 1, \(row) all(row == 9)))
# 拼接为最终结果表
result <- data.frame(
  Group = c(paste0("Group_", 1:6), "Missing"),
  Sum = c(group_sum, missing_sum)
)

注意:你原有代码中存在笔误,Sum_grp5的判断条件里写的是CODE == 5,缺少列名后缀,运行会报错,上述两种方案都规避了该问题。

内容的提问来源于stack exchange,提问作者Laura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 11:45:01