【问题标题】:Removing specific times and days every week from time dataframe从时间数据框中每周删除特定的时间和日期
【发布时间】:2017-09-18 09:54:01
【问题描述】:

学习 R 几个月了,偶然发现了一个我在 stackoverflow 上似乎还找不到的问题。我有一个时间框架数据集:

ts <- seq.POSIXt(as.POSIXlt("2014-08-01 15:00"), as.POSIXlt("2017-08-04 19:33"), by="min")
ts <- format.POSIXct(ts,'%Y%m%d %H%M')
df <- data.frame(timestamp=ts)

我已经了解如何删除每天的特定时间,以及如何删除完整的日子,例如周末/节假日,但我希望从每周删除子集,特别是每个星期六的 8:00 到每个星期六的 9:00星期一贯穿整个数据集。我尝试过相反的操作,通过使用 lubridate(感谢@Christian)来细分我需要的时间段:

dfc = ymd_hm(df$timestamp)
df[day(dfc) == 2 & hour(dfc) >= 9 | day(dfc) == 7 & hour(dfc) >= 8,]

但它似乎没有用。

干杯。

【问题讨论】:

    标签: r time posixct


    【解决方案1】:

    当使用带有方括号的 lubridate 时,你不能子集。相反,它像常规函数一样被调用。尝试更换例如hour[dfc] 和 hour(dfc) 应该没问题。

    编辑:将您需要注意的范围划分为子集 == 不像 >=

    edit2:多一点指向正确的方向

    ts_sat_until_monday = seq.POSIXt(as.POSIXlt("2014-08-02 09:00"), 
    as.POSIXlt("2014-08-04 08:00"), by = 1)
    
    unique(day(ts_sat_until_monday))
    unique(hour(ts_sat_until_monday))
    #what about sunday? up to you
    

    【讨论】:

    • 您是否检查了 lubridate 日(星期日 == 1 或星期一 == 1)的基本设置?
    • 嘿,克里斯蒂安,很抱歉之前的仓促回复。花了一些时间进行调整,因为我意识到 == 不是 >= 的意思,并且还查看了 lubridate 的基本设置,发现星期天确实是 1,谢谢。然后我将代码更改为df[day(dfc) == 2 &amp; hour(dfc) &gt;= 9 | day(dfc) == 7 &amp; hour(dfc) &gt;= 8,],但似乎仍然无法正常工作..
    • @KevinChen 查看我的第二次编辑。您忘记了星期天,实际上我不清楚您是否尝试保持星期六和星期一之间的范围(使用!或不使用)
    • 谢谢@Christian - 明白了。为耐心喝彩:)
    猜你喜欢
    • 2018-02-02
    • 2021-10-05
    • 1970-01-01
    • 2021-05-30
    • 2021-03-19
    • 1970-01-01
    • 2012-11-23
    • 2018-05-08
    • 1970-01-01
    相关资源
    最近更新 更多