我有一个数据表(处理我已经获得的所有记录的速度要快得多)我希望根据某些组遇到的条件标记行。我试着说明一下。我的数据如下所示:
ID DATE EVENT
1 01-Jan-97 A
1 01-Jan-97 K
2 03-Jan-03 A
3 04-Jan-03 K
所以有一个ID,一个日期和一个事件。最终目标是删除具有EVENT = A的行(如果在同一日期已经存在EVENT = K)。所以我考虑设置两个标志,一个如果组(ID,DATE)有A而另一个如果它们有K,那么,如果它有两个flags = 1,我会删除包含A的行,因为我不会#39;需要它。
所以,获得前两个标志就可以了。这就是代码的样子:
mydata.table[EVENT=="K", k.flag:=1, by=.(ID, DATE)]
我为A.flag做同样的事情。然后,我不知道如何获得第三个标记,如果它有两个,那么我可以用A删除记录。所以我想要一个像这样的表:
ID DATE EVENT K.FLAG A.FLAG BOTH
1 01-Jan-97 A 0 1 1
1 01-Jan-97 K 1 0 1
2 03-Jan-03 A 0 1 0
3 04-Jan-03 K 1 0 0
然后我会删除= 1和EVENT = A。我知道它不是一个非常优雅的解决方案,但它是我能想到的最好的解决方案,但我对第三个标志的声明有问题。有什么建议?我假设它有一个带有data.table的CASE语句,但我无法弄明白......
谢谢!
答案 0 :(得分:5)
dt[, flag := all(c('A', 'K') %in% EVENT), by = DATE]
dt
# ID DATE EVENT flag
#1: 1 01-Jan-97 A TRUE
#2: 1 01-Jan-97 K TRUE
#3: 2 03-Jan-03 A FALSE
#4: 3 04-Jan-03 K FALSE