如果某些行满足条件,则使用 R 中的数据 table 标记组中的所有行
Flag all rows in a group using data table in R if some rows meet a condition
我有一个数据 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、一个日期和一个事件。最终 objective 是删除具有 EVENT=A 的行(如果同一日期已经存在 EVENT=K)。所以我考虑设置两个标志,一个如果组(ID,DATE)有 A,另一个如果它们有 K,那么,如果它有两个标志 = 1,我会删除包含 A 的行,因为我不需要它。
因此,获得前两个标志就可以了。代码如下所示:
mydata.table[EVENT=="K", k.flag:=1, by=.(ID, DATE)]
我为 A.flag 做同样的事情。然后我不知道如何获得第三个标志来标记如果它有两个那么我可以用 A 删除记录。所以我想要一个 table 类似的东西:
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
然后我将删除 both=1 和 EVENT=A。我知道这不是一个非常优雅的解决方案,但它是我能想到的最好的解决方案,但我对第三个标志的声明有疑问。有什么建议么?我认为这就像有一个带有 data.table 的 CASE 语句,但我无法弄清楚...
谢谢!
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
我有一个数据 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、一个日期和一个事件。最终 objective 是删除具有 EVENT=A 的行(如果同一日期已经存在 EVENT=K)。所以我考虑设置两个标志,一个如果组(ID,DATE)有 A,另一个如果它们有 K,那么,如果它有两个标志 = 1,我会删除包含 A 的行,因为我不需要它。
因此,获得前两个标志就可以了。代码如下所示:
mydata.table[EVENT=="K", k.flag:=1, by=.(ID, DATE)]
我为 A.flag 做同样的事情。然后我不知道如何获得第三个标志来标记如果它有两个那么我可以用 A 删除记录。所以我想要一个 table 类似的东西:
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
然后我将删除 both=1 和 EVENT=A。我知道这不是一个非常优雅的解决方案,但它是我能想到的最好的解决方案,但我对第三个标志的声明有疑问。有什么建议么?我认为这就像有一个带有 data.table 的 CASE 语句,但我无法弄清楚...
谢谢!
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