将字符串转换为数字并计算时差

时间:2018-09-28 18:39:22

标签: r type-conversion

您能帮我计算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

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

1 个答案:

答案 0 :(得分: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

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

> 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