R 如何计算事件多次连续发生的持续时间?
这是我的数据的一个子集R 如何计算事件多次连续发生的持续时间?,r,data.table,R,Data.table,这是我的数据的一个子集 # | Event | Time 1 A 22:00:00 2 B 22:00:10 3 B 22:00:20 4 B 22:00:30 5 C 22:00:40 6 B 22:00:10 7 B 22:00:20 8 B 22:00:30 9
# | Event | Time
1 A 22:00:00
2 B 22:00:10
3 B 22:00:20
4 B 22:00:30
5 C 22:00:40
6 B 22:00:10
7 B 22:00:20
8 B 22:00:30
9 A 22:00:40
我想计算同一事件连续发生的持续时间–因此,假设我想计算事件B的持续时间,那么输出应该是
# | Event | Time | Duration
1 A 22:00:00 NA
2 B 22:00:10 20 Secs
3 B 22:00:20 NA
4 B 22:00:30 NA
5 C 22:00:40 NA
6 B 22:00:10 20 Secs
7 B 22:00:20 NA
8 B 22:00:30 NA
9 A 22:00:40 NA
我尝试了以下几种解决方案:
和
但我似乎无法实现我想要实现的目标。希望我能得到一些帮助!谢谢 我们可以使用data.table。将“data.frame”转换为“data.table”setDTdf1,基于“Event”的运行长度id创建分组变量,即基于相同的相邻元素“grp”,将“Time”转换为POSIXct,按“grp”分组,指定逻辑条件为“i”,事件==B,使用difftime查找最后一个和第一个“Time1”的差异,然后,我们将不是每个“grp”的第一个观察值的“持续时间”的值分配给NA
library(data.table)
setDT(df1)[, grp := rleid(Event)][, Time1 := as.POSIXct(Time, format =
"%H:%M:%S")][Event == "B",
Duration := as.numeric(difftime(Time1[.N], Time1[1], unit = "secs")), grp]
df1[df1[, .I[seq_len(.N) != 1], grp]$V1, Duration := NA][, c("Time1", "grp") := NULL][]
# No Event Time Duration
#1: 1 A 22:00:00 NA
#2: 2 B 22:00:10 20
#3: 3 B 22:00:20 NA
#4: 4 B 22:00:30 NA
#5: 5 C 22:00:40 NA
#6: 6 B 22:00:10 20
#7: 7 B 22:00:20 NA
#8: 8 B 22:00:30 NA
#9: 9 A 22:00:40 NA
数据
尝试librarydata.table;setDTdf1[,grp:=rliedEvent][,Time:=chron::timesTime][Event==B,Duration:=cas.numericmaxTime minTime*24*60*60,repNA,.N-1,grp]Woah它工作了!你能解释一下步骤吗?我对r和数据的使用相当陌生。table@cookiedookie谢谢,我更新了一些描述
df1 <- structure(list(No = 1:9, Event = c("A", "B", "B", "B", "C", "B",
"B", "B", "A"), Time = c("22:00:00", "22:00:10", "22:00:20",
"22:00:30", "22:00:40", "22:00:10", "22:00:20", "22:00:30", "22:00:40"
)), .Names = c("No", "Event", "Time"), class = "data.frame", row.names = c(NA,
-9L))