【发布时间】:2019-01-30 16:33:50
【问题描述】:
我目前有一个 data.table,其中包含以下各种列:
userid contentid sessionid closetime
polly movies 1 2018-12-16 20:44:09
polly music 2 2018-07-13 08:06:35
polly movies 3 2018-12-13 12:01:21
john music 4 2018-11-07 10:43:40
john music 5 2019-01-20 11:35:10
我想添加一个名为“sessionsSinceLastAttempt”的新列,该列标识与当前行具有相同“userid”和“contentid”值的最接近的先前行,然后包含计算它们之间的行数,其中'userid' 还是一样的。
所需输出的示例:
userid contentid sessionid closetime sessionsSinceLastAttempt
polly movies 1 2018-12-16 20:44:09 0
polly music 2 2018-07-13 08:06:35 0
polly music 2 2018-07-13 08:06:35 2
polly movies 3 2018-12-13 12:01:21 4
john music 4 2018-11-07 10:43:40 0
john music 5 2019-01-20 11:35:10 2
目前,我已经尝试过:
data[, sessionsSinceLastAttempt := {
presentcontent = contentid
.SD[, .(sessionsSinceLastAttempt = .N), by = cumsum(contentid == presentcontent)]}, by = c("userid")]
但是,结果只是先获取所有行的 cumsum(),而不根据“contentid”创建组。有人知道修复吗?任何指导将不胜感激。
【问题讨论】:
-
请提供minimal reproducible example,包括可用于创建和验证答案的预期结果。正如目前所描述的,我并不完全清楚预期的结果是什么。- 谢谢。
-
好点。道歉。希望这个例子能带来更多的清晰。
-
非常感谢。但是,我仍在为您的示例而苦苦挣扎。不应该为每个
userid对closetime进行排序吗?是否打算将sessionid2 复制到所需的输出中?
标签: r data.table