生成变量以计算连续条目

Par*_*gue 1 r dplyr

假设我有以下数据集

df <- read.table(text="UTCDate  UTCTime   White   Black
    2018.01.01 03:49:40 JL  XN
    2018.01.01 03:52:01  XN JL
    2018.01.01 03:54:16 JL  XN
    2018.01.01 03:55:58  XN JL
    2018.01.01 03:57:59 JL  XN
    2018.01.01 04:00:27  XN JL
    2018.01.01 04:01:48 JL  XN
    2018.01.01 04:03:43  XN JL
    2018.01.01 04:06:12 JL  XN
    2018.01.01 09:21:16 JL  OC
    2018.01.01 09:22:28  OC JL
    2018.01.01 09:24:16 JL  OC
    2018.01.01 09:24:58  OC JL", header=T)
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个跟踪"连续游戏"的列,其中连续游戏被定义为,例如,距离前一个条目不到10分钟的任何条目.这里,从某个玩家(例如JL)的角度定义连续游戏,因此第1行到第9行将在consec_games列中读取(1:9),第10行到第13行将是(1:4).

"consecutive_games"列应仅适用于单个玩家(例如JL).所以这将是JL_consecutive_games.这是一个大型数据集,其中多个玩家可能同时玩其他玩家.因此,连续游戏列必须仅适用于某些预先指定的玩家(在本例中为JL).

我已经看到这样的答案:利用滞后函数的群组连续计数,但我不确定如何对此数据集应用滞后.

Rui*_*das 5

仅在基地R.
首先使与所述两个分开的列的数据/时间的对象UTCDateUTCTime.然后使用cumsum技巧来获取组.最后ave将一个函数(seq_along)应用于定义的每个向量d.

UTC <- paste(df$UTCDate, df$UTCTime)
UTC <- as.POSIXct(UTC, format = "%Y.%m.%d %H:%M:%S")

d <- c(0, difftime(UTC[-1], UTC[-length(UTC)], units = "mins"))
d <- cumsum(d > 10)

ave(seq_len(nrow(df)), d, FUN = seq_along)
#[1] 1 2 3 4 5 6 7 8 9 1 2 3 4

df$Games <- ave(seq_len(nrow(df)), d, FUN = seq_along)

rm(UTC, d)    # Tidy up
Run Code Online (Sandbox Code Playgroud)