【问题标题】:lubridate::floor_date(x, "14 days"): how to prevent restart with a new month?lubridate::floor_date(x, "14 days"): 如何防止新月份重启?
【发布时间】:2019-07-12 07:01:39
【问题描述】:

我正在使用 lubridate::floor_data 对多天进行分组,但它会在新月份重新开始分组。这是阻止这种情况的替代方法吗?

floor_date(x, "7 天") 总是从每个月的第一天开始。我希望它和 floor_date(x, "week") 一样

使用来自https://r4ds.had.co.nz/dates-and-times.html 的数据

flights_dt %>% 
mutate(
week = floor_date(dep_time, "week"), 
day7  = floor_date(dep_time, "7 days"),
day14 = floor_date(dep_time, "14 days")) 

我希望第 7 天和第 14 天从之前的时间继续,而不是从该月的第一天重新开始。

【问题讨论】:

    标签: r date lubridate floor


    【解决方案1】:

    解决此问题的一种方法是将日期归因于一年中的天数。 您可以使用包lubridate

    output <- flights_dt %>% mutate(day_nb = lubridate::yday(deptime)
    

    然后按X天的时间段进行分组,你需要计算天数除以X的欧几里得除法:

    output %>% mutate(group_7_days = day_nb %/% 7,
                      group_14_days = day_nb %/% 14)
    

    然后您可以按这些新列分组以获得每 7/14 天的数据

    【讨论】:

    • 这样就解决了每月重启的问题。谢谢。但是,我也想稍后保留 ggplot 的日期格式。
    【解决方案2】:

    我想我可能已经找到了解决方案:

    df1<-flights_dt %>% 
    mutate(
    dep_date = as_date(dep_time), 
    date_14days = dmy(01012013) + floor(((dep_date) - dmy(01012013))/14)*14)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-25
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      相关资源
      最近更新 更多