【问题标题】:Diff for POSIXct with units, like in difftimePOSIXct 与单位的差异,如 difftime
【发布时间】:2016-11-07 16:52:48
【问题描述】:

我有一个 POSIXct-data 向量,想计算连续元素之间的差异,就像 diff 所做的那样

例如:

burst <- as.POSIXct(c("2016-11-07 17:20:52","2016-11-07 16:21:52", "2016-11-07 15:21:52", "2016-11-02 17:20:52","2016-11-02 16:21:52", "2016-11-02 15:21:52"))

conti <- as.POSIXct(c("2016-11-07 17:20:52","2016-11-06 17:20:52", "2016-11-05 17:20:52", "2016-11-04 17:20:52","2016-11-03 17:20:52", "2016-11-02 17:20:52"))

diff(burst)
diff(conti)

我的问题是,单位不相等。我记得函数difftime 有一个名为unit 的参数,但我无法构造apply 函数来获得类似diff 的行为。

【问题讨论】:

  • 我没有得到你的问题;请分享您想要的示例输出!

标签: r apply difftime


【解决方案1】:

我不确定是否有办法为 POSIXt 对象强制使用 diff 的特定单元。如果没有,您可以直接使用数值,然后设置类和单位属性,这样您仍然会有一个带有单位属性的difftime 对象。

例如,以分钟为单位:

burst.diff = diff(as.numeric(burst))/60
burst.diff = as.difftime(burst.diff, units="mins")

burst.diff
Time differences in mins
[1]   -59   -60 -7141   -59   -60

如果您不关心维护对象类或单元,那么您可以这样做:

burst.diff = diff(as.numeric(burst))/60 

你可以把它打包成一个函数。我不确定这是否是我处理类和属性的“正确”方式,我很想知道是否有更好的方法来做到这一点:

my_difftime = function(x, units="mins") {

  div = c("secs"=1, "mins"=60, "hours"=3600)

  if(is.na(match(units, names(div)))) {
    stop('Please specify either units as either "secs", "mins", or "hours"')
  } else {
    x = diff(as.numeric(x))/div[match(units, names(div))]
    as.difftime(x, units=units) 
  }
}

lapply(list(burst=burst, conti=conti), my_difftime, units="hours")
$burst
Time differences in hours
[1]   -0.9833333   -1.0000000 -119.0166667   -0.9833333   -1.0000000

$conti
Time differences in hours
[1] -24 -25 -24 -24 -24

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2021-11-23
    • 2011-01-05
    • 2017-05-03
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多