我有一个数据框,其中包含每个用户每周的页面浏览量。我想确定每个用户在特定事件发生后他们的观点是否增加、减少或保持不变。我的数据如下所示:
Userid week xeventinweek numviews
Alice 1 2 5
Alice 2 0 3
Alice 4 1 6
Bob 2 2 3
Bob 3 0 5
因此,在这种情况下,Alice 在第 1 周发生 2 个事件后,她的观看次数下降了,并且第 2 周没有事件可供衡量。然而,鲍勃在参加两次事件后一周将他的观点从 3 增加到 5。
我想要一张表格,其中每周至少有一次事件,其 View 有差异。所以它应该看起来像这样:
Userid week xeventinweek numviews numnextweek difference
Alice 1 2 5 3 -2
Alice 4 1 6 NA NA #the row for week 2 is missing because there were no events then for Alice
Bob 2 2 3 5 2
不一定要同时拥有 numnextweek 和 Difference 列 - 要么 要么 都可以。
我可以使用 data.table 和 for 循环来完成此操作,但运行时间太长,因此不可行。我想过使用滚动联接,但对于分组数据似乎不可能(即需要为每个用户 ID 单独完成)。我如何使用 data.table 的 native 功能来做到这一点?
最佳答案
使用匹配
:
dat[, numnextweek := numviews[match(week + 1, week)] , by=Userid]
dat[, difference := numviews - numnextweek , by=Userid]
dat[xeventinweek != 0]
# Userid week xeventinweek numviews numnextweek difference
#1: Alice 1 2 5 3 2
#2: Alice 4 1 6 NA NA
#3: Bob 2 2 3 5 -2
关于r - 与下一行、分组、data.table 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25718452/