【问题标题】:Convert string to numeric and calculate time difference [duplicate]将字符串转换为数字并计算时间差[重复]
【发布时间】:2019-03-04 18:55:12
【问题描述】:

你能帮我计算一下 R 中两次连续观察之间的时间差吗?

2018-03-08T21:40:46.555Z
2018-03-08T21:43:52.492Z
2018-03-08T21:43:52.691Z
2018-03-08T21:48:07.593Z
2018-03-08T21:48:08.729Z
2018-03-08T21:54:59.071Z
2018-03-08T21:54:59.121Z
2018-03-08T21:55:00.636Z
2018-03-08T21:55:00.694Z

如何将这些字符串转换为数字并进行计算?

【问题讨论】:

    标签: r type-conversion


    【解决方案1】:

    您正在 R 中寻找两个不同的函数。第一个将它从字符串转换为日期时间,从所有意图和目的来看,它只是一个数字。为此,您必须指定字符串的格式。您可以使用as.POSIXct(my_dates, format='%Y-%m-%dT%H:%M:%S') 执行此操作。这会将对象返回为POSIXct 对象,这允许我们对其进行“时间数学”。下一步是计算差异。这可以通过difftime 函数来完成。由于您希望它在连续值上完成,您可以使用difftime(tail(my_dates, -1), head(my_dates, -1)) 来获取差异向量。完整代码如下:

    > x = c('2018-03-08T21:40:46.555Z', '2018-03-08T21:43:52.492Z', '2018-03-08T21:43:52.691Z', '2018-03-08T21:48:07.593Z', '2018-03-08T21:48:08.729Z', '2018-03-08T21:54:59.071Z', '2018-03-08T21:54:59.121Z', '2018-03-08T21:55:00.636Z', '2018-03-08T21:55:00.694Z')
    > y = as.POSIXct(x, format='%Y-%m-%dT%H:%M:%S')
    > z = difftime(tail(y, -1), head(x, -1))
    > z
    Time differences in hours
    [1] 21.73111 21.73111 21.80194 21.80222 21.91639 21.91639
    [7] 21.91667 21.91667
    

    您可以通过更改difftime中的units参数来获得不同时间单位的结果。

    > z = difftime(tail(y, -1), head(x, -1), units='days')
    > z
    Time differences in days
    [1] 0.9054630 0.9054630 0.9084144 0.9084259 0.9131829
    [6] 0.9131829 0.9131944 0.9131944
    

    【讨论】:

      猜你喜欢
      • 2019-08-24
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      • 2014-11-20
      • 2019-11-21
      • 2020-09-01
      • 1970-01-01
      • 2021-05-12
      相关资源
      最近更新 更多