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

dplyr分组统计:为各城市补全年份缺失值的实现方案

补全城市-年份计数组合,填充缺失值为0

我明白你想要的是让每个城市都对应2019和2020两个年份,无数据的计数显示为0(这确实比NA更实用)。这里有个简洁的解决方案,用tidyr包的complete()函数就能轻松实现,先看完整操作:

library(dplyr)
library(tidyr)

# 你的原始数据
places <- c("London", "London", "London", "Paris", "Paris", "Rennes")
years <- c(2019, 2019, 2020, 2019, 2019, 2020)
dataset <- data.frame(years, places)

# 先按城市和年份统计数量
dataset2 <- dataset %>% count(places, years)

# 补全所有城市-年份组合,缺失的计数填0
dataset_full <- dataset2 %>%
  complete(places, years, fill = list(n = 0))

# 查看最终结果
dataset_full

运行后会得到你想要的输出:

places years n
1 London 2019 2
2 London 2020 1
3 Paris  2019 2
4 Paris  2020 0
5 Rennes 2019 0
6 Rennes 2020 1

方法解释

  • complete(places, years):这个函数会自动生成places和years所有可能的配对组合,不管原始计数数据里是否存在对应记录。
  • fill = list(n = 0):专门指定对于没有对应计数的组合,把n的值填充为0。如果确实需要NA,删掉这个fill参数即可。

无tidyr的替代方案

要是你不想加载tidyr包,也可以手动生成组合再合并:

# 生成所有城市-年份的可能组合
all_pairs <- expand.grid(
  places = unique(dataset$places),
  years = unique(dataset$years)
)

# 合并计数数据,将NA替换为0
dataset_full <- all_pairs %>%
  left_join(dataset2, by = c("places", "years")) %>%
  mutate(n = replace(n, is.na(n), 0))

这个方法和上面的效果完全一致,只是步骤稍多一些。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:02:59