我在 R 中有一个 data.table,我需要根据特定条件对其进行子集化
dt <- data.table(X_ID=c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4), Y_ID=c(1,2,3,4,5,6, 1,2,3,4,5,6, 1,2,3,4,5,6, 1,2,3,4,5,6), Value1=c(6,4,8,9,10,12,5,7,8,3,4,8,7,3,9,7,4,12,45,3,2,1,2,5),Value2=c(6,6,8,9,10,12,5,4,8,3,4,8,7,5,9,7,4,12,45,1,2,1,2,5))
我想保留当 Y_ID 等于 2 时值 1 大于值 2 的所有 X_ID。例如,对于 X_ID=1,当 Y_ID=2 时值 1 大于值 2。在这种情况下,我想保留 X_ID=1 的所有行。
我目前正在使用过滤器功能(如下所示)来获取解决方案。
dt2 <- filter(dt,is.na(match(dt$X_ID,filter(dt, Y_ID==2&Value1<Value2)$X_ID)))
但是有没有办法让这段代码更具可读性呢?或者使用 data.table 原生的东西来对我需要的行进行子集化?
最佳答案
使用data.table
:
dt<-dt[X_ID %in% dt[(Y_ID == 2 & (Value1 > Value2))]$X_ID]
# X_ID Y_ID Value1 Value2
#1: 2 1 5 5
#2: 2 2 7 4
#3: 2 3 8 8
#4: 2 4 3 3
#5: 2 5 4 4
#6: 2 6 8 8
#7: 4 1 45 45
#8: 4 2 3 1
#9: 4 3 2 2
#10: 4 4 1 1
#11: 4 5 2 2
#12: 4 6 5 5
关于r - 根据其他变量中的条件值,通过一个变量对 data.table 进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55663196/