【问题标题】:Mean of date interval in lubridatelubridate 中日期间隔的平均值
【发布时间】:2018-10-17 19:41:03
【问题描述】:

如何获得润滑间隔对象的“平均值”(或更准确地说是中点)?我尝试使用基本 mean() 函数,但返回的是双精度值。

library(lubridate)   
ex = interval(ymd("2009-05-01"), ymd("2009-07-01"))
mean(ex)
[1] 5270400

【问题讨论】:

    标签: r lubridate


    【解决方案1】:

    一种选择是只将interval 持续时间的一半添加到开始日期。试试看:

    ex@start + as.duration(ex)/2
    [1] "2009-05-31 12:00:00 UTC"
    

    【讨论】:

    • 很失望没有内置的函数来解决这个问题,但这似乎是最不冗长的方法。谢谢!
    【解决方案2】:

    您可以使用int_start()int_end() 函数来计算区间的中点:

    library(lubridate)
    int_start(ex) + (int_end(ex) - int_start(ex))/2
    [1] "2009-05-31 12:00:00 UTC"
    

    为了简单起见,你可以把它变成一个简单的函数:

    int_midpoint <- function(interval) {
        int_start(interval) + (int_end(interval) - int_start(interval))/2
    }
    
    int_midpoint(ex)
    [1] "2009-05-31 12:00:00 UTC"
    

    这个函数也适用于向量上的lapply(虽然不是sapply):

    lapply(c(ex, ex), int_midpoint)
    [[1]]
    [1] "2009-05-31 12:00:00 UTC"
    
    [[2]]
    [1] "2009-05-31 12:00:00 UTC"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-28
      • 2018-10-07
      • 1970-01-01
      相关资源
      最近更新 更多