我的数据看起来像:
player event diff
A x NA
A y 2
A z 240
A w 3
A x 9
B x NA
B y 3
B z 120
C x NA
C x 8
Run Code Online (Sandbox Code Playgroud)
我做的是通过玩家列分组并获取时间事件之间的差异,因此每当新玩家有事件时,差异列的NA都是.
我想要做的是将数据划分为彼此在几分钟内的玩家特定交互(比如diff = 20的截止值).我最终想要的是:
player event diff interaction
A x NA 1
A y 2 1
A z 240 2
A w 3 2
A x 9 2
B x NA 1
B y 3 1
B z 120 2
C x NA 1
C x 8 1
Run Code Online (Sandbox Code Playgroud)
因此,基本上基于具有相同的玩家并且差异小于20来对交互进行分组,否则开始新的交互.如果存在NA,则也开始新的交互.我不确定如何以快速/有效的方式做到这一点,因为我有很多玩家的大数据集.我倾向于寻求dplyr解决方案
您可以coalesce在diff列中使用0替换NA(或低于阈值的其他数字)并在diff >= 20条件上执行cumsum ,这将在diff超过某个阈值时给出不同的id :
library(dplyr)
df %>% group_by(player) %>%
mutate(interaction = cumsum(coalesce(diff, 0L) >= 20) + 1)
# Source: local data frame [10 x 4]
# Groups: player [3]
# player event diff interaction
# <fctr> <fctr> <int> <dbl>
# 1 A x NA 1
# 2 A y 2 1
# 3 A z 240 2
# 4 A w 3 2
# 5 A x 9 2
# 6 B x NA 1
# 7 B y 3 1
# 8 B z 120 2
# 9 C x NA 1
# 10 C x 8 1
Run Code Online (Sandbox Code Playgroud)