如何在tidyverse中生成填充虚拟行,实现月度转日度数据转换
用tidyverse将月度数据转换为日度数据
可以借助dplyr和lubridate这两个tidyverse工具包快速实现,核心思路是为每个月末日期生成当月完整的日期序列,再将序列展开为行:
步骤1:加载依赖包并准备示例数据
library(tidyverse) library(lubridate) # 示例数据 df <- tibble( date = ymd(c("2013-04-30", "2013-05-31", "2013-06-30")), index = c(232, 232, 233) )
步骤2:生成日度数据
df_daily <- df %>% # 计算当月第一天 mutate(month_start = floor_date(date, "month")) %>% # 生成从当月第一天到月末的日期序列 mutate(daily_date = map2(month_start, date, ~seq(.x, .y, by = "day"))) %>% # 将日期序列展开为多行 unnest(daily_date) %>% # 整理列名并移除冗余列 select(date = daily_date, index)
结果说明
处理后的数据会包含每个月从第一天到最后一天的所有日期,对应index值与原月末数据保持一致:
- 2013年4月1日至4月30日的
index均为232 - 2013年5月1日至5月31日的
index均为232 - 2013年6月1日至6月30日的
index均为233
你可以用head(df_daily, 5)查看前5行,用tail(df_daily, 5)查看后5行验证结果。
内容的提问来源于stack exchange,提问作者Ethan Mark
相关产品推荐
相关产品推荐

