R语言:如何筛选汽车生产数据集频率Top5国家并生成表格
汽车生产数据集前5高频国家统计及NA处理方案
核心思路
不用拆分步骤,用dplyr的管道语法就能一步完成NA过滤、频率统计、取前5的操作,下面给你详细的代码和每一步的解释(假设你的数据集叫car_production,存储国家的列名为country,如果实际列名不一样,记得替换)。
方法一:用slice_max直接取前5(推荐)
# 先加载dplyr包 library(dplyr) # 完整操作代码 car_production %>% # 第一步:过滤掉国家列的空值(NA),避免统计无效数据 filter(!is.na(country)) %>% # 第二步:按国家分组 group_by(country) %>% # 第三步:统计每个国家的记录数,命名为frequency;.groups="drop"用来取消分组,避免后续警告 summarize(frequency = n(), .groups = "drop") %>% # 第四步:按频率降序取前5个国家 slice_max(order_by = frequency, n = 5)
方法二:用arrange排序后取前5
如果你习惯先排序再取头部数据,也可以这么写:
car_production %>% filter(!is.na(country)) %>% group_by(country) %>% summarize(frequency = n(), .groups = "drop") %>% # 按频率从高到低排序 arrange(desc(frequency)) %>% # 取前5行 head(5)
额外说明:NA的另一种处理方式
如果你觉得filter(!is.na(country))写起来麻烦,也可以用tidyr包的drop_na函数直接删除国家列含NA的行,需要先加载tidyr:
library(dplyr) library(tidyr) car_production %>% drop_na(country) %>% group_by(country) %>% summarize(frequency = n(), .groups = "drop") %>% slice_max(frequency, n = 5)
对你疑问的解答
- 是否需要先生成频率列表再提取前5?本质上是这个逻辑,但用dplyr的管道可以把所有步骤连起来,不用单独生成中间列表,代码更简洁易读。
- 为什么之前的方案无效?大概率是没在统计前过滤NA,或者排序/取前5的步骤写错了,按上面的代码一步步来就能解决。
内容的提问来源于stack exchange,提问作者candypox
相关产品推荐
相关产品推荐

