假设我有以下数据集
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).
我已经看到这样的答案:利用滞后函数的群组连续计数,但我不确定如何对此数据集应用滞后.
仅在基地R.
首先使与所述两个分开的列的数据/时间的对象UTCDate和UTCTime.然后使用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)
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |