【发布时间】:2021-02-04 10:03:53
【问题描述】:
我想获取多个重复发生的事件类型之间的时间,这些事件类型也可能同时发生,看起来像这样
group time type1 type2 type3
[1,] 1 18262 0 0 0
[2,] 2 520 0 1 1
[3,] 2 6324 1 1 1
[4,] 3 -27998 0 1 0
[5,] 3 -27393 0 1 0
[6,] 3 5490 0 0 0
[7,] 3 6366 0 1 1
[8,] 3 12548 0 1 1
[9,] 4 13216 0 0 0
[10,] 5 18262 0 0 0
[11,] 6 976 1 0 1
[12,] 6 15952 1 0 1
[13,] 7 3580 0 0 0
[14,] 8 4207 1 0 1
[15,] 9 -815 1 0 1
[16,] 9 2316 1 0 1
[17,] 9 3245 1 1 1
[18,] 9 4062 0 1 0
[19,] 9 5995 1 0 1
我想按组计算最后一个事件类型 2 和事件类型 3 之间的时间。否则,意味着当该组中在类型 3 之前没有先前的事件类型 2 时,该变量应为 NA。
group time type1 type2 type3 t_type2_to_type3
[1,] 1 18262 0 0 0 NA
[2,] 2 520 0 1 1 NA
[3,] 2 6324 1 1 1 5804
[4,] 3 -27998 0 1 0 NA
[5,] 3 -27393 0 1 0 0
[6,] 3 5490 0 0 0 NA
[7,] 3 6366 0 1 1 33759
[8,] 3 12548 0 1 1 6182
[9,] 4 13216 0 0 0 NA
[10,] 5 18262 0 0 0 NA
[11,] 6 976 1 0 1 NA
[12,] 6 15952 1 0 1 NA
[13,] 7 3580 0 0 0 NA
[14,] 8 4207 1 0 1 NA
[15,] 9 -815 1 0 1 NA
[16,] 9 2316 1 0 1 NA
[17,] 9 3245 1 1 1 NA
[18,] 9 4062 0 1 0 NA
[19,] 9 5995 1 0 1 1933
只为一个事件这样做似乎很简单。但是对于可能同时发生的多个重复事件似乎要困难得多
输入数据:
dat <- cbind(
c(1,2,2,3,3,3,3,3,4,5,6,6,7,8,9,9,9,9,9),
c(18262, 520, 6324, -27998, -27393, 5490, 6366, 12548, 13216, 18262, 976, 15952, 3580, 4207, -815, 2316, 3245, 4062, 5995),
c(0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1),
c(0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0),
c(0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1)
)
colnames(dat) <- c("group", "time", "type1", "type2", "type3")
编辑:
很高兴知道如何使用 dplyr 做到这一点
【问题讨论】:
-
您想要的输出的第 7 行似乎有错字...我认为它应该是
33759,因为6366 - -27393 = 33759而不是34359.. 对吗?您可能减去了27.993而不是27.393。 -
谢谢@Wimpel,我更正了。