我有可能会遇到事件的科目。如果他们确实经历过,那么他们应该没有更多的记录 (他们不应该再次体验这个事件)。 我试图突出不满足这一点的记录。
在下面的示例中,ID 3和4存在问题。
.SDcols
我的尝试 - 到达那里但效率低下(我的数据大约是4GB所以我遇到了ram问题)
set.seed(1)
df <- data.frame(id=rep(1:4, each=3), time=1:3,
outcome = c(0,0,0, 0,0,1, 0,1,0, 0,1,1))
df
# id time outcome
# 1 1 1 0
# 2 1 2 0
# 3 1 3 0
# 4 2 1 0
# 5 2 2 0
# 6 2 3 1
# 7 3 1 0
# 8 3 2 1
# 9 3 3 0
# 10 4 1 0
# 11 4 2 1
# 12 4 3 1
你能建议一种更有效的方法吗
答案 0 :(得分:3)
我还没有测试内存效率,但我想这会更有效率,请尝试以下
library(data.table)
setDT(df)[, warn := sum(outcome) > outcome[.N], by = id]
df
# id time outcome warn
# 1: 1 1 0 FALSE
# 2: 1 2 0 FALSE
# 3: 1 3 0 FALSE
# 4: 2 1 0 FALSE
# 5: 2 2 0 FALSE
# 6: 2 3 1 FALSE
# 7: 3 1 0 TRUE
# 8: 3 2 1 TRUE
# 9: 3 3 0 TRUE
# 10: 4 1 0 TRUE
# 11: 4 2 1 TRUE
# 12: 4 3 1 TRUE