如何使用R中指定的天数按日期回填数据列

如何使用R中指定的天数按日期回填数据列,r,dplyr,R,Dplyr,我的数据集如下所示: df1 = data.frame(date = seq(as.Date("2019/12/18"), as.Date("2020/01/01"), 'days')) df1 = df1 %>% mutate(holiday = case_when(date == '2019-12-25' ~'Christmas', date =='2020-01-01' ~ 'New Year'))

我的数据集如下所示:

df1 = data.frame(date = seq(as.Date("2019/12/18"), as.Date("2020/01/01"), 'days'))
df1 = df1 %>% mutate(holiday = case_when(date == '2019-12-25' ~'Christmas',
                                         date =='2020-01-01' ~ 'New Year'))

date        holiday
2019-12-18  NA          
2019-12-19  NA          
2019-12-20  NA          
2019-12-21  NA          
2019-12-22  NA          
2019-12-23  NA          
2019-12-24  NA          
2019-12-25  Christmas           
2019-12-26  NA          
2019-12-27  NA
2019-12-28  NA          
2019-12-29  NA          
2019-12-30  NA          
2019-12-31  NA          
2020-01-01  New Year
date        holiday
2019-12-18  Christmas           
2019-12-19  Christmas           
2019-12-20  Christmas           
2019-12-21  Christmas           
2019-12-22  Christmas           
2019-12-23  Christmas           
2019-12-24  Christmas           
2019-12-25  Christmas           
2019-12-26  New Year            
2019-12-27  New Year
2019-12-28  New Year            
2019-12-29  New Year            
2019-12-30  New Year            
2019-12-31  New Year            
2020-01-01  New Year
我需要在假期前7天补休。注:新年和圣诞节之间有6天。所以我需要的是如下所示:

df1 = data.frame(date = seq(as.Date("2019/12/18"), as.Date("2020/01/01"), 'days'))
df1 = df1 %>% mutate(holiday = case_when(date == '2019-12-25' ~'Christmas',
                                         date =='2020-01-01' ~ 'New Year'))

date        holiday
2019-12-18  NA          
2019-12-19  NA          
2019-12-20  NA          
2019-12-21  NA          
2019-12-22  NA          
2019-12-23  NA          
2019-12-24  NA          
2019-12-25  Christmas           
2019-12-26  NA          
2019-12-27  NA
2019-12-28  NA          
2019-12-29  NA          
2019-12-30  NA          
2019-12-31  NA          
2020-01-01  New Year
date        holiday
2019-12-18  Christmas           
2019-12-19  Christmas           
2019-12-20  Christmas           
2019-12-21  Christmas           
2019-12-22  Christmas           
2019-12-23  Christmas           
2019-12-24  Christmas           
2019-12-25  Christmas           
2019-12-26  New Year            
2019-12-27  New Year
2019-12-28  New Year            
2019-12-29  New Year            
2019-12-30  New Year            
2019-12-31  New Year            
2020-01-01  New Year
有人知道如何做到这一点吗?
我需要一个通用的解决方案。我的真实数据有一长串假期。该解决方案也应适用于其他类似情况,如任意天数的两次回填。非常感谢

您可以用
方向='up'
填充
假日
值,并用
NA
替换少于2天的值。您可以根据实际情况将2替换为7

library(dplyr)

df1 %>% 
  tidyr::fill(holiday, .direction = 'up') %>%
  group_by(holiday) %>%
  mutate(new_holiday = replace(holiday, row_number() < n() - 2, NA))

#   date       holiday   new_holiday
#   <date>     <chr>     <chr>      
# 1 2019-12-18 Christmas NA         
# 2 2019-12-19 Christmas NA         
# 3 2019-12-20 Christmas NA         
# 4 2019-12-21 Christmas NA         
# 5 2019-12-22 Christmas NA         
# 6 2019-12-23 Christmas Christmas  
# 7 2019-12-24 Christmas Christmas  
# 8 2019-12-25 Christmas Christmas  
# 9 2019-12-26 New Year  NA         
#10 2019-12-27 New Year  NA         
#11 2019-12-28 New Year  NA         
#12 2019-12-29 New Year  NA         
#13 2019-12-30 New Year  New Year   
#14 2019-12-31 New Year  New Year   
#15 2020-01-01 New Year  New Year   
库(dplyr)
df1%>%
tidyr::填充(假日,.方向='向上')%>%
组别(假日)%>%
变异(新假日=替换(假日,行号()
您应该添加一个更复杂的示例,使用
df1%>%fill(holiday,.direction='up')可以实现您的预期输出。
但这不是您想要的。到目前为止您尝试了什么?太好了!这正是我需要的。