gpt4 book ai didi

r - 如何计算使用 R 更改一列中的值之前的持续时间?

转载 作者:行者123 更新时间:2023-12-01 23:48:17 26 4
gpt4 key购买 nike

我问过类似的问题How to calculate time duration for the continuous variables having same value in R并得到了很好的解决方案。但是我对这个问题的理解和描述有误。实际上正确的结果应该是计算当前颜色到另一种颜色变化的持续时间,而不是从第一次到最后一次相同颜色的持续时间。

 time sg. 0
1 2014-09-01 00:00:12.0 green
2 2014-09-01 00:00:13.5 green
3 2014-09-01 00:00:30.0 amber
4 2014-09-01 00:00:30.0 amber
5 2014-09-01 00:00:31.5 amber
6 2014-09-01 00:00:32.0 amber
7 2014-09-01 00:00:32.2 amber
8 2014-09-01 00:00:33.5 amber
9 2014-09-01 00:00:33.0 red
10 2014-09-01 00:00:35.0 red
11 2014-09-01 00:00:35.2 red
12 2014-09-01 00:00:37.0 red
13 2014-09-01 00:00:41.0 red
14 2014-09-01 00:00:42.0 red
15 2014-09-01 00:00:42.2 red
16 2014-09-01 00:00:43.0 red
17 2014-09-01 00:00:44.7 red
18 2014-09-01 00:00:44.2 red
19 2014-09-01 00:00:45.5 red
20 2014-09-01 00:00:47.0 red
21 2014-09-01 00:00:48.7 red
22 2014-09-01 00:00:49.7 red
23 2014-09-01 00:00:49.7 red
24 2014-09-01 00:00:49.9 red
25 2014-09-01 00:00:50.9 green

因此对于这个数据片段,单独颜色(红色/绿色/琥珀色)的结果如下:

green 18.0
amber 3.0
red 17.9
...

我意识到我处理这个问题是错误的,但我不知道如何改正。非常感谢您的帮助。

最佳答案

这是使用 data.table 包的可能方法。一般来说,我们会使用它的 shift 函数创建一个滞后变量,并使用它的 rleid 函数创建一个索引(所以 green 不会被分组一起)。

library(data.table)
# If time is already of `POSIXct` class, you will not need to convert it again
setDT(df)[, `:=`(time = as.POSIXct(time),
ltime = shift(as.POSIXct(time), 1L, type = "lead"),
indx = rleid(sg.0))][, ltime[.N] - time[1], .(sg.0, indx)]
# sg.0 indx V1
# 1: green 1 18.0 secs
# 2: amber 2 3.0 secs
# 3: red 3 17.9 secs
# 4: green 4 NA secs

关于r - 如何计算使用 R 更改一列中的值之前的持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28026052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com