首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据R中的时间差创建行索引

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

Stack Overflow用户
提问于 2016-09-18 09:08:02
回答 2查看 44关注 0票数 2

我有这样的数据:

代码语言:javascript
复制
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

我所做的是按照玩家列进行分组,并获取时间事件之间的差异,因此每当新玩家有事件时,NA for diff列。

我想要做的是将数据划分为特定于玩家的交互,这些交互彼此之间不超过几分钟(假设diff =20的分界值)。我最终想要的是:

代码语言:javascript
复制
     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

因此,基本上交互是基于具有相同玩家的分组,并且差异小于20,否则开始新的交互。如果存在安娜,则还将开始新的交互。我真的不确定如何以一种快速/有效的方式做到这一点,因为我有一个包含许多玩家的大型数据集。我更喜欢dplyr解决方案

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-18 09:20:00

您可以使用diff列中的coalesce将NA替换为0(或其他低于阈值的数字),并对diff >= 20条件执行累积和,这将在diff超过某个阈值时提供一个不同的id:

代码语言:javascript
复制
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
票数 6
EN

Stack Overflow用户

发布于 2016-09-18 11:28:09

我们还可以使用base R来获得预期的输出

代码语言:javascript
复制
df1$interaction <- with(df1, ave(diff, player, FUN = function(x) 
                        cumsum(x > 20 & !is.na(x))+1))
df1$interaction
#[1] 1 1 2 2 2 1 1 2 1 1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39553152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档