我有一个交互数据集,其中许多是我需要过滤掉的伪复制品。我需要确定(然后删除)所有在同一时间窗口(例如10秒)内与同一个人发生相同互动的实例,但前提是这些互动是连续的(如果它们之间发生另一互动,则不会重复) )。
我的数据外观如下所示:
Datetime Interaction Individual
1 190513064553 DUAL_SUCCESS 01151e00
2 190513064605 SOLO_SUCCESS 078c6700
3 190513064609 SOLO_SUCCESS 01151e00
4 190513064613 SOLO_SUCCESS 078c6700
5 190513071534 SOLO_SUCCESS 078c6700
6 190513071541 SOLO_SUCCESS 078c6700
因此,在此示例中,如果窗口为10秒,则该过程将过滤掉第6行,而不是第3或4行,因为尽管第4行看起来是2的副本并且在10秒之内,但它被a分割。不同的人。
我意识到这是一种利基的情况,但是任何建议都将不胜感激:)
答案 0 :(得分:0)
数据集的简短版本:
Datetime<- c(190513064553, 190513064605, 190513064609, 190513064633)
Interaction <- c("DUAL_SUCCESS", "SOLO_SUCCESS", "SOLO_SUCCESS", "SOLO_SUCCESS")
Individual <- c (1,2,3,3)
df <- data.frame(Datetime, Interaction, Individual)
第1步:创建其他列:
df %>%
mutate(time_window = Datetime - lag(Datetime),
same_int = (Interaction == lag(Interaction)),
same_ind = (Individual == lag(Individual)))
Datetime Interaction Individual time_window same_int same_ind
1 190513064553 DUAL_SUCCESS 1 NA NA NA
2 190513064605 SOLO_SUCCESS 2 52 FALSE FALSE
3 190513064609 SOLO_SUCCESS 3 4 TRUE FALSE
4 190513064633 SOLO_SUCCESS 3 24 TRUE TRUE
第2步:按新列过滤数据集
df %>%
mutate(time_window = Datetime - lag(Datetime),
same_int = (Interaction == lag(Interaction)),
same_ind = (Individual == lag(Individual))) %>%
filter(!(time_window > 10 & !is.na(time_window) & same_int & same_ind))
Datetime Interaction Individual time_window same_int same_ind
1 190513064553 DUAL_SUCCESS 1 NA NA NA
2 190513064605 SOLO_SUCCESS 2 52 FALSE FALSE
3 190513064609 SOLO_SUCCESS 3 4 TRUE FALSE
如有必要,现在可以通过添加%>% select(-c(time_window, same_int, same_ind))