r - 与下一行、分组、data.table 进行比较

标签 r join merge data.table

我有一个数据框,其中包含每个用户每周的页面浏览量。我想确定每个用户在特定事件发生后他们的观点是否增加、减少或保持不变。我的数据如下所示:

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/

相关文章:

R数据点周边缓冲区

mysql - 连接 2 个或更多数据库与 1 列结果

mySQL:左连接,需要对不同类型的数据进行连接

java - 如何以最快的方式将两个排序数组相交?

r - 根据 R 中字符串变量的部分匹配进行过滤

r - 将元素添加到深层嵌套列表中

c++ - 将外部库添加到当前的 C++ 项目中

MYSQL select join multiple table and SUM

git - 为什么 'git mergetool' (meld) 显示冲突标记?

python - 在 Pandas 中合并 "one-to-one"数据帧