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

dplyr group by:如何为缺失城市添加NA值?

解决办法:补全主数据框中缺失城市的NA值

嘿,这个需求很常见,我来给你两个简单好用的方案,都是基于dplyr生态的工具:

方案一:用left_join关联主数据框的城市列表

这个思路是先按你的逻辑统计符合条件的观测数,再和主数据框的完整城市列表做左连接,自动为缺失的城市填充NA:

假设你的主数据框叫main_df,里面包含所有需要的城市(列名也是city),代码如下:

# 第一步:按你的需求统计符合条件的观测数
count_by_city <- data %>%
  group_by(city) %>%
  filter(cond1 == TRUE | cond2 == TRUE) %>%
  tally()

# 第二步:和主数据框的城市列表左连接,补全缺失城市
final_counts <- main_df %>%
  select(city) %>% # 只提取主数据框的城市列,避免多余列干扰
  distinct() %>%   # 确保每个城市只出现一次
  left_join(count_by_city, by = "city")

这样处理后,final_counts里会包含main_df的所有城市,那些在data里没有符合条件观测的城市,对应的n列就会是NA,完美符合你的要求。如果之后要把这个统计列追加到主数据框,直接用left_join(main_df, final_counts, by = "city")就行。

方案二:用tidyr::complete直接补全缺失城市

如果你已经加载了tidyr(dplyr生态的常用包),可以在统计完成后直接用complete函数补全主数据框的所有城市,更简洁:

library(tidyr)

count_by_city <- data %>%
  group_by(city) %>%
  filter(cond1 == TRUE | cond2 == TRUE) %>%
  tally() %>%
  ungroup() %>%  # 先取消分组,避免complete的分组冲突
  complete(city = main_df$city)  # 指定要补全的完整城市列表

complete会自动把main_df里的所有城市都加入结果,没有统计数据的城市对应的n会被设为NA,一步到位。

两种方法都能实现你的需求,选哪个看你习惯~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:10:52