为了更加通用化这个问题,我认为它可以重述为: 创建一个滚动的时间敏感的因子变量。虽然这不是一个常见的需求,但它可以用于许多不同的数据源。
我有一系列
因此,有三种类型的行为:
下面是一个示例数据集。请记住这个数据集是简化的,用于测试每天滚动1天的变化,所以简单的检查前一条记录的方法实际上是行不通的。 如果你能制作出更好的数据集,请告诉我,我会编辑这篇文章。
解决方案应该是像这样,逐列进行
这是一个非常类似的帖子 - 应该有助于解决这个问题。查看链接:如何进行只在特定日期范围内查找的条件总和 我还探索了使用dplyr的
感谢所有的帮助!我无法感谢这个论坛足够多。我会经常回来查看。
我有一系列
不规则的时间数据
,每天有超过1条记录,有成千上万的用户。我想创建一个新的列player_type
,来跟踪他们行为的滚动30天的定义。该行为是由他们玩的游戏定义的;该列 'games'
是一个包含游戏A、游戏B的因子。因此,有三种类型的行为:
- 只玩游戏A -
'A'
- 只玩游戏B -
'B'
- 同时玩两个游戏 -
'混合'
interval(current_date, current_date - new_period(days=30)
(使用lubridate)。下面是一个示例数据集。请记住这个数据集是简化的,用于测试每天滚动1天的变化,所以简单的检查前一条记录的方法实际上是行不通的。 如果你能制作出更好的数据集,请告诉我,我会编辑这篇文章。
p <- c( 1, 1, 1, 2, 2, 2, 6, 6, 6)
g <- c('A', 'B', 'B', 'A', 'B', 'A', 'A', 'B', 'B')
d <- seq(as.Date('2014-10-01'), as.Date('2014-10-9'), by=1)
df <- data.frame(player_id = p, date = d, games = g)
我需要的输出结果是:
player_id date games type
1 1 2014-10-01 A A (OR NA)
2 1 2014-10-02 B Hybrid
3 1 2014-10-03 B B
4 2 2014-10-04 A A (OR NA)
5 2 2014-10-05 B Hybrid
6 2 2014-10-06 A Hybrid
7 6 2014-10-07 A A (OR NA)
8 6 2014-10-08 B Hybrid
9 6 2014-10-09 B B
解决方案应该是像这样,逐列进行
apply
,并应用一个函数来检查30天前的情况,并使用ifelse()
语句查看他们玩了什么游戏。这是一个非常类似的帖子 - 应该有助于解决这个问题。查看链接:如何进行只在特定日期范围内查找的条件总和 我还探索了使用dplyr的
rowwise()
和mutates()
,但对我来说历史时间是一个难点。感谢所有的帮助!我无法感谢这个论坛足够多。我会经常回来查看。