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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:10:51