R 根据其他变量中的条件值,将data.table子集为一个变量
我在R中有一个data.table,我需要根据某些条件将其子集R 根据其他变量中的条件值,将data.table子集为一个变量,r,data.table,subset,R,Data.table,Subset,我在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
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))
dt使用dplyr
我们可以group\u by
X\u ID
和filter
对Y\u ID==2
和Value1>Value2
至少有一个值的组进行分组
library(dplyr)
dt %>%
group_by(X_ID) %>%
filter(any(Y_ID == 2 & Value1 > Value2))
# X_ID Y_ID Value1 Value2
# <dbl> <dbl> <dbl> <dbl>
# 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
库(dplyr)
dt%>%
分组依据(X\U ID)%>%
过滤器(任意(Y_ID==2&Value1>Value2))
#X_ID Y_ID值1值2
#
# 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
使用数据。表
:
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
dt Value2])]$X_ID]
#X_ID Y_ID值1值2
#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
刚刚注意到,上面提到的子集代码并没有改变仍然包含24行的原始data.table(与其他data.table操作不同,例如添加新的计算列,其中原始data.table也会随着添加的新列进行内联更新)。我需要将此输出分配给一个新的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