基于Zoo::yearmon类筛选R数据框中城市完整年度数据
提取城市完整年度数据(12个月全量)的解决方案
嘿,这个需求我之前也遇到过!用zoo的yearmon类来处理确实很顺手,咱们一步步来实现:
1. 先把年月转成yearmon类型
假设你的数据框叫df,包含city、year、month三列。首先把年份和月份组合成yearmon对象,这能帮我们更方便地处理年月维度:
library(zoo) library(dplyr) # 用dplyr做分组筛选更直观,用base R也能实现 # 创建yearmon列:拼接年和月为"YYYY-MM"格式,再转成yearmon类型 df$year_month <- as.yearmon(paste(df$year, df$month, sep = "-"))
2. 筛选出有12个月的完整年度
接下来按城市+年份分组,判断每个分组里的月份数量是否为12,只保留符合条件的分组数据:
# 第一步:找出所有城市的完整年度 complete_city_years <- df %>% group_by(city, year) %>% summarise(total_months = n_distinct(month)) %>% # 统计每个分组的唯一月份数 filter(total_months == 12) # 只保留有12个月的年度 # 第二步:从原始数据中提取这些完整年度的记录 df_full_years <- df %>% inner_join(complete_city_years, by = c("city", "year")) %>% select(-total_months) # 移除临时统计列
小技巧:直接从yearmon提取年份
如果你不想依赖原数据里的year列,也可以直接从yearmon对象中提取年份,这样更灵活:
# 从yearmon列转成年份整数 df$year <- as.integer(df$year_month) # 之后重复上面的分组筛选逻辑就可以了
这样处理完,df_full_years里就只保留了每个城市中拥有全年12个月完整数据的年度记录啦!
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

