使用floor_date按日期分组并补全缺失日期的R技术求助
解决方案
步骤说明
- 生成20年时间分组:用
lubridate::floor_date()将每个日期向下取整到最近的20年区间起始日。 - 按国家+时间分组汇总:同时以
Country和生成的20年分组为维度,计算n的总和。 - 补全缺失组合:用
tidyr::complete()生成所有国家与20年区间的组合,缺失的n值填充为0。
完整代码
# 加载所需包 library(dplyr) library(lubridate) library(tidyr) # 处理数据 df_processed <- df_period5 %>% # 为每个日期生成对应的20年区间起始日 mutate(yearbin = floor_date(period5, "20 years")) %>% # 按国家和20年区间分组,汇总n的总和 group_by(Country, yearbin) %>% summarize(sum_n = sum(n), .groups = "drop") %>% # 补全所有国家与20年区间的组合,缺失值填0 complete( # 覆盖原始数据中所有国家 Country = unique(df_period5$Country), # 生成从最早到最晚日期对应的20年区间序列 yearbin = seq( floor_date(min(df_period5$period5), "20 years"), floor_date(max(df_period5$period5), "20 years"), by = "20 years" ), # 缺失的sum_n填充为0 fill = list(sum_n = 0) )
代码解释
floor_date(period5, "20 years"):将日期归到最近的20年区间起始点(例如1939年归到1920-01-01,1950年归到1940-01-01)。group_by(Country, yearbin):同时按国家和20年区间分组,确保汇总维度符合需求。complete(...):生成所有可能的国家-区间组合,用fill参数将无数据的组合的sum_n设为0,补全缺失的日期分组。
内容的提问来源于stack exchange,提问作者Aby Ramata Almamy Mbaye
相关产品推荐
相关产品推荐

