r - 生成一个变量来计算连续条目
问题描述
假设我有以下数据集
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)
我正在尝试创建一个跟踪“连续游戏”的列,其中连续游戏被定义为,例如,距离前一个条目不到 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
推荐阅读
- angular - 将 webpack 的 `require.context` 与 angular cli 和 ivy 一起使用
- c# - 刚体游戏对象在移动时被限制移动
- c - 为什么使用 n=sizeof(myarray)/sizeof(myarray[0]) 会给出“注释”错误,但为 n 指定数值不会?
- reference - 在 STM32CubeIDE(基于 Eclipse 的 IDE)中添加新的源文件和头文件不能无缝工作
- objective-c - 如何在 Swift 中使用 Objective-C 可视化工具
- c# - 处理单例和静态对象
- prestashop - 使用 smarty 从模板中获取元素 id - Prestahop
- react-admin - 了解 React-Admin 翻译
- yii2 - yii2 swift mail 会变成垃圾邮件
- php - WordPress:使用