比较R中具有相同日期/组/id的行之间的时间
我的数据帧如下所示:比较R中具有相同日期/组/id的行之间的时间,r,loops,time,compare,rows,R,Loops,Time,Compare,Rows,我的数据帧如下所示: Device_id Group Nb_burst Date_time 24 1 3 2018-09-02 10:04:04 24 1 5 2018-09-02 10:08:00 55 2 3 2018-09-03 10:14:34 55
Device_id Group Nb_burst Date_time
24 1 3 2018-09-02 10:04:04
24 1 5 2018-09-02 10:08:00
55 2 3 2018-09-03 10:14:34
55 2 7 2018-09-03 10:02:29
16 3 2 2018-09-20 08:17:11
16 3 71 2018-09-20 06:03:40
22 4 10 2018-10-02 11:33:55
22 4 14 2018-10-02 16:22:18
我想知道,只有相同的ID,相同的组号,相同的日期,两行之间的时间间隔
如果时间间隔>1小时,则可以保留所有时间间隔。如果timelag<1小时,则仅保留Nb_突发最大的行 这意味着一个数据帧,如:
Device_id Group Nb_burst Date_time
24 1 5 2018-09-02 10:08:00
55 2 7 2018-09-03 10:02:29
16 3 71 2018-09-20 06:03:40
22 4 10 2018-10-02 11:33:55
22 4 14 2018-10-02 16:22:18
我试过:
Data$timelag <- c(NA, difftime(Data$Min_start.time[-1], Data$Min_start.time[-nrow(Data)], units="hours"))
Data$timelag我不确定为什么您的组3
没有重复,因为时差大于一小时
但是,您可以使用ave
创建两个索引变量。首先,每个分组的Nb_突发的顺序。第二,每个分组的时间差异
dat <- within(dat, {
score <- ave(Nb_burst, Device_id, Group, as.Date(Date_time),
FUN=order)
thrsh <- abs(ave(as.numeric(Date_time), Device_id, Group, as.Date(Date_time),
FUN=diff)/3600) > 1
})
资料
dat我不确定为什么您的组3
没有重复,因为时差大于一小时
但是,您可以使用ave
创建两个索引变量。首先,每个分组的Nb_突发的顺序。第二,每个分组的时间差异
dat <- within(dat, {
score <- ave(Nb_burst, Device_id, Group, as.Date(Date_time),
FUN=order)
thrsh <- abs(ave(as.numeric(Date_time), Device_id, Group, as.Date(Date_time),
FUN=diff)/3600) > 1
})
资料
dat尝试data.table
shift函数,参见示例:尝试data.table
shift函数,参见示例:感谢您的帮助!当我尝试在x[I]中出错时,我收到了这条消息,可能您的Date\u time
列不是POSIXct
格式。当您执行dat$Date\u时,ist有效吗谢谢您的帮助!当我尝试在x[I]中出错时,我收到了这条消息,可能您的Date\u time
列不是POSIXct
格式。当您执行dat$Date\u时间时,ist工作吗
dat <- structure(list(Device_id = c(24L, 24L, 55L, 55L, 16L, 16L, 22L,
22L), Group = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L), Nb_burst = c(3L,
5L, 7L, 3L, 2L, 71L, 10L, 14L), Date_time = structure(c(1535875444,
1535875680, 1535962474, 1535961749, 1537424231, 1537416220, 1538472835,
1538490138), class = c("POSIXct", "POSIXt"), tzone = "")), row.names = c(NA,
-8L), class = "data.frame")