如果某些行满足条件

时间:2015-05-28 15:07:00

标签: r data.table

我有一个数据表(处理我已经获得的所有记录的速度要快得多)我希望根据某些组遇到的条件标记行。我试着说明一下。我的数据如下所示:

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语句,但我无法弄明白......

谢谢!

1 个答案:

答案 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
相关问题