2017-01-11 3 views
2

Я пытаюсь определить, выпал ли уик-энд в течение интервала дат. Я смог определить, является ли конкретная дата выходным, но не при попытке взглянуть на ряд дат. Это возможно? Если да, пожалуйста, сообщите. ТИА.выходные дни в интервале R

library(lubridate, chron) 
start.date <- c("1/1/2017", "2/1/2017") 
end.date <- c("1/21/2017", "2/11/2017") 

df <- data.frame(start.date, end.date) 

df$start.date <- mdy(df$start.date) 
df$end.date <- mdy(df$end.date) 

df$interval.date <- interval(df$start.date, df$end.date) 

df$weekend.exist <- ifelse(is.weekend(df$interval.date), 1, 0) 
# Error in dts - floor(dts) : 
# Arithmetic operators undefined for 'Interval' and 'Interval' classes: 
# convert one to numeric or a matching time-span class. 

ответ

3

почему вы не предпочитаете seq дат, а не создавать интервал? как

df$weekend.exist <- sapply(1:nrow(df), function(i) 
       as.numeric(any(is.weekend(seq(df$start.date[i], df$end.date[i],by = "day"))))) 
# [1] 1 1 

library(dplyr) 
df %>% 
group_by(start.date,end.date) %>% 
mutate(weekend.exist = as.numeric(any(is.weekend(seq(start.date, end.date,by = "day"))))) 
# start.date end.date weekend.exist 
#  <date>  <date>   <dbl> 
# 1 2017-01-01 2017-01-21    1 
# 2 2017-02-01 2017-02-03    1 
+0

Спасибо, joel.wilson. Я думаю, что мне пришлось упаковать все это в pipe с помощью 'mutate()', но ваше решение с 'sapply()' работает хорошо. – user2300643

+0

просто попробуйте 'dplyr' решение с вашими реальными данными @ user2300643 –

+0

Спасибо, @ joel.wilson. Вы мастер R. – user2300643

Смежные вопросы