r - 基于多个连续时间流计算行数

标签 r time

我有一个大文件的时间序列数据,如下所示。该数据集涵盖年份,以 15 分钟为增量。一个小的子集看起来像:

uniqueid     time
a            2014-04-30 23:30:00 
a            2014-04-30 23:45:00
a            2014-05-01 00:00:00
a            2014-05-01 00:15:00
a            2014-05-12 13:45:00
a            2014-05-12 14:00:00
b            2014-05-12 13:45:00
b            2014-05-12 14:00:00
b            2014-05-12 14:30:00

要重现上述内容:
time<-c("2014-04-30 23:30:00","2014-04-30 23:45:00","2014-05-01 00:00:00","2014-05-01 00:15:00",
    "2014-05-12 13:45:00","2014-05-12 14:00:00","2014-05-12 13:45:00","2014-05-12 14:00:00",
    "2014-05-12 14:30:00")

uniqueid<-c("a","a","a","a","a","a","b","b","b")
mydf<-data.frame(uniqueid,time)

我的目标是计算每个连续时间流每个唯一 ID 的行数。连续时间跨度是指每 15 分钟在一行中标记一个唯一 id(例如 id A,从 30.04.14 23.30 hrs 到 01.05.14 00.15 hrs 标记 - 因此是 4 行),但是当这个流为 15 - 分钟迭代被中断(在 01.05.14 00:15 之后,它没有在 01.05.14 00:30 标记,因此它被中断),它应该将下一个时间戳记为新的连续时间流的开始,并再次计算行,直到此流程再次中断。时间是POSIX。

正如你在上面的例子中看到的;连续的时间流可能涵盖不同的日子、不同的月份或不同的年份。我有许多唯一的 id(并且如上所述,一个非常大的文件),所以我正在寻找一种我的计算机可以处理的方式(循环可能不起作用)。

我正在寻找类似的输出:
uniqueid    flow     number_rows
a           1        4
a           2        2
b           3        2
b           4        1

我研究了一些时间包(例如 lubridate),但鉴于我有限的 R 知识,我什至不知道从哪里开始。

我希望一切都清楚 - 如果没有,我很乐意尝试进一步澄清。非常感谢您提前!

最佳答案

使用 data.table 执行此操作的另一种方法还使用时差将使用 data.table组号和每组行数的内部值:

library(data.table)
res<-setDT(mydf)[, list(number_rows=.N,flow=.GRP),
                 by=.(uniqueid,cumsum(as.numeric(difftime(time,shift(time,1L,type="lag",fill=0))) - 15))][,cumsum:=NULL]
print(res)

   uniqueid number_rows flow
1:        a           4    1
2:        a           2    2
3:        b           2    3
4:        b           1    4

此外,由于您发布的示例数据与您发布的子集不一致,我在下面包含了我的数据:

数据
time<-as.POSIXct(c("2014-04-30 23:30:00","2014-04-30 23:45:00","2014-05-01 00:00:00","2014-05-01 00:15:00",
        "2014-05-12 13:45:00","2014-05-12 14:00:00","2014-05-12 13:45:00","2014-05-12 14:00:00",
        "2014-05-12 14:30:00"))


uniqueid<-c("a","a","a","a","a","a","b","b","b")
mydf<-data.frame(uniqueid,time)

关于r - 基于多个连续时间流计算行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38231821/

相关文章:

r - grid_plot + tikzDevice + 带有 latex 标记的共享图例

python - 我如何使用python获取上个月和前一年

go - 如何从 golang 中的字段类型内部访问结构标记

r - 如何在读取 R 中的行之前等待网页加载?

r - scale_x_datetime 产生错误?

r - 如果匹配,数据框列上的 ifelse 将替换为日期时间列值

r - 每行增加(或不增加)一列的内容

C/UNIX 进程间通信用管道发送字符串

javascript - 在数组中查找时间,如果没有找到,则选择上一个

c++ - Unix 函数 gmtime_r 的 Windows 等价物是什么?