有效地指示按组满足条件

时间:2015-04-23 20:49:58

标签: r

我有可能会遇到事件的科目。如果他们确实经历过,那么他们应该没有更多的记录 (他们不应该再次体验这个事件)。 我试图突出不满足这一点的记录。

在下面的示例中,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

你能建议一种更有效的方法吗

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