如何使用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')可以实现您的预期输出。
但这不是您想要的。到目前为止您尝试了什么?太好了!这正是我需要的。