【发布时间】:2019-08-15 17:16:57
【问题描述】:
我有一个时间序列数据。我想在“soak”> 3600列时对行进行分组和编号。当soak > 3600时的第一行编号为1,连续的行也编号为1,直到另一行满足soak > 3600的条件。然后那行和后续行编号为 2,直到第三次出现浸泡 > 3600。
还提供了我的数据的小样本和我尝试过的代码。
我的代码进行了计数,但似乎使用 ave() 给了我一些十进制数...有没有办法输出整数?
starts <- structure(list(datetime = structure(c(1440578907, 1440579205,
1440579832, 1440579885, 1440579926, 1440579977, 1440580044, 1440580106,
1440580195, 1440580256, 1440580366, 1440580410, 1440580476, 1440580529,
1440580931, 1440580966, 1440587753, 1440587913, 1440587933, 1440587954
), class = c("POSIXct", "POSIXt"), tzone = ""), soak = c(NA,
70L, 578L, 21L, 2L, 41L, 14L, 16L, 32L, 9L, 45L, 20L, 51L, 25L,
364L, 4L, 6764L, 20L, 4L, 5L)), row.names = c(NA, -20L), class = c("data.table",
"data.frame"), .internal.selfref = <pointer: 0x000000000a4d1ef0>)
starts$trip <- with(starts, ave(tdiff, cumsum(replace(soka, NA, 10000) > 3600)))
【问题讨论】:
-
你想要
starts[, trip := cumsum(ifelse(is.na(soak), 0, soak > 3600))]吗? (如果没有,请提供所需的输出) -
@IceCreamToucan 我修改为starts[, trip := cumsum(ifelse(is.na(soak), 1, soap > 3600))] 然后得到我想要的结果...
标签: r count dplyr data.table cumsum