【问题标题】:weekend dates within an interval R区间 R 内的周末日期
【发布时间】:2017-01-11 20:18:01
【问题描述】:

我正在尝试确定周末是否在日期间隔内。我已经能够确定特定日期是否是周末,但在尝试查看一系列日期时却无法确定。这可能吗?如果有,请指教。 TIA。

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.

【问题讨论】:

    标签: r date lubridate chron


    【解决方案1】:

    您为什么不喜欢 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
    

    【讨论】:

    • 谢谢你,乔尔.威尔逊。我想我只能用mutate() 将这一切打包到一个管道中,但是您使用sapply() 的解决方案效果很好。
    • 用你的真实数据试试dplyr解决方案@user2300643
    • 谢谢你,@joel.wilson。你是一个 R 向导。
    • 很高兴帮助你@user2300643,还不是向导!!
    猜你喜欢
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多