我有一个数据框,其中包含每个用户每周的页面浏览量。我想确定每个用户在特定事件发生后他们的观点是否增加、减少或保持不变。我的数据如下所示:
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 在第一周发生了 2 个事件后,她的观看次数下降了,并且她在第二周没有事件可供衡量。然而,鲍勃在参加两次活动后一周将他的观点从 3 增加到 5。
我想要一张桌子,每周至少有一次活动,其观点存在差异。所以它应该看起来像这样:
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 的本机功能来做到这一点?
Using match
:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)