使用complete与seq按月份扩展日期失败,求解决方案
按分组扩展日期序列的正确实现
你之前的代码问题在于未按id分组处理,seq直接作用于整个dates_from和dates_to列,无法为每个id单独生成对应日期序列。正确做法是先分组,再在每组内生成序列并填充对应值:
正确代码
library(tidyverse) # 原始数据 df <- tibble(id = c('x1', 'x2'), dates_from = c(as.Date('2022-01-31'), as.Date('2022-10-31')), dates_to = c(as.Date('2022-08-31'), as.Date('2022-12-31')), value = c(0,1)) # 扩展日期序列 df2 <- df %>% group_by(id) %>% # 为每组生成从dates_from到dates_to的月度日期序列 complete(dates = seq(from = dates_from, to = dates_to, by = "1 month")) %>% # 填充每组对应的value值 fill(value) %>% ungroup() %>% # 调整列顺序匹配预期输出 select(id, dates, value)
运行结果
# A tibble: 11 × 3 id dates value <chr> <date> <dbl> 1 x1 2022-01-31 0 2 x1 2022-02-28 0 3 x1 2022-03-31 0 4 x1 2022-04-30 0 5 x1 2022-05-31 0 6 x1 2022-06-30 0 7 x1 2022-07-31 0 8 x1 2022-08-31 0 9 x2 2022-10-31 1 10 x2 2022-11-30 1 11 x2 2022-12-31 1
关键说明
group_by(id):确保每个id单独处理自身的起止日期complete(dates = seq(...)):在每组内生成连续的月度日期序列fill(value):将每组原始的value值填充到扩展后的所有行中
内容的提问来源于stack exchange,提问作者jkatam
相关产品推荐
相关产品推荐

