不检测日期

Doesn't detect dates

我正在使用函数 isoweekif_else 进行一些操作,但有些日期不执行获取 NA.

的操作

db = read_dta("C:/Users/crist/Downloads/db.dta")


db$date1 = substr(db$date1,1,10)
db$date1 = as.Date(db$date1)
db$date2 = substr(db$date2,1,10)
db$date2 = as.Date(db$date2)

t = db %>% 
  drop_na(value) %>% 
  mutate(Weekday = weekdays(date2),
         date2 = replace(date2, Weekday %in% c("Saturday", "Sunday"), NA),
         num_week = isoweek(date2),
         dummy_sas = if_else(date2 >= ymd("2020-05-18"),1,0)) %>% 
  fill(date2)  %>% 
  select(-Weekday) %>% 
  mutate(date2 = if_else(date2 < as.Date("2020-05-18") & SAS == 1, date1, date2))


I need for example all the week numbers but i get NA's

> summary(isoweek(t$date2))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00   22.00   31.00   28.15   39.00   47.00 
> summary(t$num_week)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   1.00   21.00   31.00   28.12   39.00   47.00     109 

数据here

我还没有下载数据,但我认为这里的操作顺序似乎是个问题。试试这个:

library(dplyr)
library(lubridate)

db %>% 
  drop_na(value) %>% 
  mutate(Weekday = weekdays(date2),
         num_week = isoweek(date2),
         date2 = replace(date2, Weekday %in% c("Saturday", "Sunday"), NA),
         dummy_sas = as.integer(date2 >= ymd("2020-05-18"))) %>%
  fill(date2)  %>% 
  select(-Weekday) %>% 
  mutate(date2 = if_else(date2 < as.Date("2020-05-18") & SAS == 1, date1, date2))

在您的代码中,您将周末替换为 NA :

date2 = replace(date2, Weekday %in% c("Saturday", "Sunday"), NA)

然后 isoweek date2

num_week = isoweek(date2)

所以周末 NA num_week

你在最后一行再次替换 date2

mutate(date2 = if_else(date2 < as.Date("2020-05-18") & SAS == 1, date1, date2))

所以你在 t$date2 中没有得到任何 NA