根据R中的时差创建行索引

dim*_*r91 2 r dplyr

我的数据看起来像:

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解决方案

Psi*_*dom 6

您可以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)