Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据另一个data.table中定义的多个条件筛选data.table中的案例_R_Data.table_Dplyr - Fatal编程技术网

R 如何根据另一个data.table中定义的多个条件筛选data.table中的案例

R 如何根据另一个data.table中定义的多个条件筛选data.table中的案例,r,data.table,dplyr,R,Data.table,Dplyr,我想知道是否有任何有效的方法可以通过另一个data.table中定义的多个条件过滤data.table。在这种情况下,有2个数据表: # the filter data.table defines the condition dt_filter<-data.table(A=c(1,2),B=c(8,7)) # dt1 the data.table to be filtered dt1<-data.table(A=rep(c(1,2),5),B=c(8,4,3,1,1,5,9,7,1,

我想知道是否有任何有效的方法可以通过另一个data.table中定义的多个条件过滤data.table。在这种情况下,有2个数据表:

# the filter data.table defines the condition
dt_filter<-data.table(A=c(1,2),B=c(8,7))
# dt1 the data.table to be filtered
dt1<-data.table(A=rep(c(1,2),5),B=c(8,4,3,1,1,5,9,7,1,1),C=c(rep(1,5),rep(2,5)))

ls_tmp<-lapply (1:nrow(dt_filter),function(i){
# exclude the record with the A&B defined the filter
dt1_add<-dt1[A==dt_filter[[i,1]]&B!=dt_filter[[i,2]]]
})
result<- rbindlist(ls_tmp)
#filter data.table定义了条件

dt_filter另外两种解决方案,读取更清晰,无需设置键

dt1[which(dt1$A==dt\u filter$A&dt1$B!=dt\u filter$B),]

现在使用%


dt1[dt1$A%在%dt\u过滤器$A&!(dt1$B%在%dt\u过滤器$B中),]

什么是组?请贴上标签
A、B、C
<代码>B=dtu滤波器[…这里的不相等,是打字错误吗?@Vlo列a是组id。您的代码真的很难读取。为了我们和您的利益,请尝试清理和简化!@Señor O对不起,它们已被编辑。选择具有匹配B
dt2\u add
和不匹配B
dt1\u add
的行,然后绑定lis有何意义这不等于选择了一个组的所有成员吗?这回到了我最初的问题是
!=
dt1\u添加一个拼写错误?由于data.table默认使用“with”,我相信您可以进一步简化为:
dt1[其中(a==dt\u filter$a&B!=dt\u filter$B),]
setkey(dt1, A)

dt1[dt_filter, allow = T][B != i.B, !'i.B']
#   A B C
#1: 1 1 1
#2: 1 1 2
#3: 1 3 1
#4: 1 9 2
#5: 2 1 1
#6: 2 1 2
#7: 2 4 1
#8: 2 5 2