如何计算 R 中最短和最长的时间间隔?
How do I calculate the shortest and longest time intervals in R?
我有以下名为 phone
的数据集:
TIMESTAMP
time
date
2021-01-12 10:42:50.221
10:42:50
2021-01-12
2021-01-12 10:46:01.826
10:46:01
2021-01-12
2021-01-12 10:50:10.063
10:50:10
2021-01-12
2021-01-12 10:53:10.715
10:53:10
2021-01-12
2021-01-12 10:53:14.329
10:53:14
2021-01-12
2021-01-12 10:54:19.792
10:54:19
2021-01-12
2021-01-12 11:01:43.044
11:01:43
2021-01-12
2021-01-12 11:04:36.202
11:04:36
2021-01-12
我想计算整个数据集的两个连续 time
值之间的时间间隔,以便我可以找到一天中最短和最长的时间间隔。我试过下面的代码,试图计算时差,但它给了我负值,我不知道这有多准确。我也试过将单位更改为分钟,但输出对我来说没有意义。
v2 <- ymd_hms(phone$TIMESTAMP)
v1 <- difftime(v2[-length(v2)], v2[-1], unit = "hour")
v1 的输出:
x
-0.0532236 hours
-0.0689547 hours
-0.0501811 hours
-0.0010039 hours
-0.0181842 hours
如何计算间隔并按长度降序排列?
我的数据输入如下:
structure(list(TIMESTAMP = c("2021-01-12 10:42:50.221", "2021-01-12 10:46:01.826",
"2021-01-12 10:50:10.063", "2021-01-12 10:53:10.715", "2021-01-12 10:53:14.329",
"2021-01-12 10:54:19.792", "2021-01-12 11:01:43.044", "2021-01-12 11:04:36.202",
"2021-01-12 11:07:36.636", "2021-01-12 11:18:59.169", "2021-01-12 11:25:44.954",
"2021-01-12 11:25:54.263", "2021-01-12 11:26:25.414", "2021-01-12 11:28:05.471",
"2021-01-12 11:30:24.349"), time = c("10:42:50", "10:46:01",
"10:50:10", "10:53:10", "10:53:14", "10:54:19", "11:01:43", "11:04:36",
"11:07:36", "11:18:59", "11:25:44", "11:25:54", "11:26:25", "11:28:05",
"11:30:24"), date = structure(c(18639, 18639, 18639, 18639, 18639,
18639, 18639, 18639, 18639, 18639, 18639, 18639, 18639, 18639,
18639), class = "Date")), row.names = c(NA, 15L), class = "data.frame")
您快到了,difftime(time1,time2)
计算时间 1 - 时间 2,并且由于您的时间戳是从早到晚排序的,因此此差异将始终 <=0。因此,解决此问题的一种方法是将两个参数沿相反方向移动 1 位以获得正结果,确保第一个参数始终 >= 到第二个参数。
df$diff=c(NA,difftime(tail(df$TIMESTAMP,-1),head(df$TIMESTAMP,-1),unit="hour"))
df[order(df$diff,decreasing=T),]
TIMESTAMP time date diff
10 2021-01-12 11:18:59.169 11:18:59 2021-01-12 0.189592500
7 2021-01-12 11:01:43.044 11:01:43 2021-01-12 0.123125556
11 2021-01-12 11:25:44.954 11:25:44 2021-01-12 0.112718056
3 2021-01-12 10:50:10.063 10:50:10 2021-01-12 0.068954722
2 2021-01-12 10:46:01.826 10:46:01 2021-01-12 0.053223611
4 2021-01-12 10:53:10.715 10:53:10 2021-01-12 0.050181111
9 2021-01-12 11:07:36.636 11:07:36 2021-01-12 0.050120556
8 2021-01-12 11:04:36.202 11:04:36 2021-01-12 0.048099444
15 2021-01-12 11:30:24.349 11:30:24 2021-01-12 0.038577222
14 2021-01-12 11:28:05.471 11:28:05 2021-01-12 0.027793611
6 2021-01-12 10:54:19.792 10:54:19 2021-01-12 0.018184167
13 2021-01-12 11:26:25.414 11:26:25 2021-01-12 0.008653056
12 2021-01-12 11:25:54.263 11:25:54 2021-01-12 0.002585833
5 2021-01-12 10:53:14.329 10:53:14 2021-01-12 0.001003889
1 2021-01-12 10:42:50.221 10:42:50 2021-01-12 NA
我有以下名为 phone
的数据集:
TIMESTAMP | time | date |
---|---|---|
2021-01-12 10:42:50.221 | 10:42:50 | 2021-01-12 |
2021-01-12 10:46:01.826 | 10:46:01 | 2021-01-12 |
2021-01-12 10:50:10.063 | 10:50:10 | 2021-01-12 |
2021-01-12 10:53:10.715 | 10:53:10 | 2021-01-12 |
2021-01-12 10:53:14.329 | 10:53:14 | 2021-01-12 |
2021-01-12 10:54:19.792 | 10:54:19 | 2021-01-12 |
2021-01-12 11:01:43.044 | 11:01:43 | 2021-01-12 |
2021-01-12 11:04:36.202 | 11:04:36 | 2021-01-12 |
我想计算整个数据集的两个连续 time
值之间的时间间隔,以便我可以找到一天中最短和最长的时间间隔。我试过下面的代码,试图计算时差,但它给了我负值,我不知道这有多准确。我也试过将单位更改为分钟,但输出对我来说没有意义。
v2 <- ymd_hms(phone$TIMESTAMP)
v1 <- difftime(v2[-length(v2)], v2[-1], unit = "hour")
v1 的输出:
x |
---|
-0.0532236 hours |
-0.0689547 hours |
-0.0501811 hours |
-0.0010039 hours |
-0.0181842 hours |
如何计算间隔并按长度降序排列?
我的数据输入如下:
structure(list(TIMESTAMP = c("2021-01-12 10:42:50.221", "2021-01-12 10:46:01.826",
"2021-01-12 10:50:10.063", "2021-01-12 10:53:10.715", "2021-01-12 10:53:14.329",
"2021-01-12 10:54:19.792", "2021-01-12 11:01:43.044", "2021-01-12 11:04:36.202",
"2021-01-12 11:07:36.636", "2021-01-12 11:18:59.169", "2021-01-12 11:25:44.954",
"2021-01-12 11:25:54.263", "2021-01-12 11:26:25.414", "2021-01-12 11:28:05.471",
"2021-01-12 11:30:24.349"), time = c("10:42:50", "10:46:01",
"10:50:10", "10:53:10", "10:53:14", "10:54:19", "11:01:43", "11:04:36",
"11:07:36", "11:18:59", "11:25:44", "11:25:54", "11:26:25", "11:28:05",
"11:30:24"), date = structure(c(18639, 18639, 18639, 18639, 18639,
18639, 18639, 18639, 18639, 18639, 18639, 18639, 18639, 18639,
18639), class = "Date")), row.names = c(NA, 15L), class = "data.frame")
您快到了,difftime(time1,time2)
计算时间 1 - 时间 2,并且由于您的时间戳是从早到晚排序的,因此此差异将始终 <=0。因此,解决此问题的一种方法是将两个参数沿相反方向移动 1 位以获得正结果,确保第一个参数始终 >= 到第二个参数。
df$diff=c(NA,difftime(tail(df$TIMESTAMP,-1),head(df$TIMESTAMP,-1),unit="hour"))
df[order(df$diff,decreasing=T),]
TIMESTAMP time date diff
10 2021-01-12 11:18:59.169 11:18:59 2021-01-12 0.189592500
7 2021-01-12 11:01:43.044 11:01:43 2021-01-12 0.123125556
11 2021-01-12 11:25:44.954 11:25:44 2021-01-12 0.112718056
3 2021-01-12 10:50:10.063 10:50:10 2021-01-12 0.068954722
2 2021-01-12 10:46:01.826 10:46:01 2021-01-12 0.053223611
4 2021-01-12 10:53:10.715 10:53:10 2021-01-12 0.050181111
9 2021-01-12 11:07:36.636 11:07:36 2021-01-12 0.050120556
8 2021-01-12 11:04:36.202 11:04:36 2021-01-12 0.048099444
15 2021-01-12 11:30:24.349 11:30:24 2021-01-12 0.038577222
14 2021-01-12 11:28:05.471 11:28:05 2021-01-12 0.027793611
6 2021-01-12 10:54:19.792 10:54:19 2021-01-12 0.018184167
13 2021-01-12 11:26:25.414 11:26:25 2021-01-12 0.008653056
12 2021-01-12 11:25:54.263 11:25:54 2021-01-12 0.002585833
5 2021-01-12 10:53:14.329 10:53:14 2021-01-12 0.001003889
1 2021-01-12 10:42:50.221 10:42:50 2021-01-12 NA