You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中按地理区域分组后统计数据框变量的不同值计数

解决R语言中按分组统计变量各值(含NA)出现次数的问题

你想要按地理区域分组,统计某个变量不同取值(包括NA)的出现次数,用tidyverse工具完全可以实现,之前的代码问题在于没有指定要统计的目标变量,也没设置正确的计数逻辑。下面给你几种实用的方法:

方法1:用count()快速统计单个变量的分组分布

count()是group_by()+summarize(n())的语法糖,用起来非常简洁,还能保留NA的分组:

# 按WHOregion分组,统计UrbanSanPol各值的数量(包含NA)
df %>%
  count(WHOregion, UrbanSanPol, .drop = FALSE)
  • .drop = FALSE参数会保留所有可能的分组组合,哪怕某个区域没有某个取值(比如某区域没有0,也会显示该行,计数为0),如果不需要可以去掉这个参数。
  • 运行后会得到三列:区域、变量值、对应计数,完全符合你的需求。

方法2:用group_by()+summarize()手动实现

如果你更习惯用summarize(),可以这样写,效果和上面一致:

df %>%
  group_by(WHOregion, UrbanSanPol, .drop = FALSE) %>%
  summarize(count = n(), .groups = "drop")
  • .groups = "drop"是让结果回到普通dataframe,避免后续操作受分组状态影响。

方法3:统计多个变量的分组分布

如果需要同时统计多个变量(比如UrbanSanPol、UrbanSanWom),可以先把数据转成长格式再统计:

df %>%
  # 保留分组列和需要统计的变量列
  select(WHOregion, UrbanSanPol, UrbanSanWom) %>%
  # 把多个变量转成"变量名-变量值"的长格式
  pivot_longer(cols = -WHOregion, names_to = "variable", values_to = "value") %>%
  # 按区域、变量、值分组计数
  group_by(WHOregion, variable, value, .drop = FALSE) %>%
  summarize(count = n(), .groups = "drop")

这样一次性就能得到所有目标变量在各区域的取值分布。

方法4:单独统计各值(含NA)为列

如果你希望把每个取值的计数作为单独的列展示(比如count_0、count_1、count_NA),可以用sum()结合条件判断:

df %>%
  group_by(WHOregion) %>%
  summarize(
    count_0 = sum(UrbanSanPol == "0", na.rm = TRUE),
    count_1 = sum(UrbanSanPol == "1", na.rm = TRUE),
    count_NA = sum(is.na(UrbanSanPol))
  )
  • na.rm = TRUE确保计算时忽略NA值对求和的影响,准确统计对应取值的数量。

为什么你的原代码没生效?

你之前写的df %>% group_by(region) %>% summarize(count)没有指定计数的逻辑,也没有按要统计的变量分组,所以最终只会得到每个区域的总行数,而不是各取值的分布。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:25:17