使用R-将数据帧的不同列与一组有效列组合进行比较

使用R-将数据帧的不同列与一组有效列组合进行比较,r,dataframe,R,Dataframe,我正在使用R 3.2.2版的R Studio,我想在数据帧中筛选行,只想看到那些行,其中两列的值组合与第二个数据帧中的有效组合存储值对不匹配。 我听说R的设计并不是为了以一种高性能的方式使用循环,所以我正在寻找一种不使用循环的解决方案,如果有的话 使用我缩小的这个示例数据,第一个数据帧dfItem包含条目ID和两个状态 > dfItem ID Status_1 Status_2 1 1 1 1 2 2 1 2 3 3

我正在使用R 3.2.2版的R Studio,我想在数据帧中筛选行,只想看到那些行,其中两列的值组合与第二个数据帧中的有效组合存储值对不匹配。 我听说R的设计并不是为了以一种高性能的方式使用循环,所以我正在寻找一种不使用循环的解决方案,如果有的话

使用我缩小的这个示例数据,第一个数据帧dfItem包含条目ID和两个状态

> dfItem
  ID Status_1 Status_2
1  1        1        1
2  2        1        2
3  3        2        1
4  4        3        3
5  5        2        3
6  6        1        1
> dfValidStatus
  Status_1 Status_2
1        1        1
2        1        2
3        3        3
第二个数据帧dfValidPairs包含两种状态的所有有效组合

> dfItem
  ID Status_1 Status_2
1  1        1        1
2  2        1        2
3  3        2        1
4  4        3        3
5  5        2        3
6  6        1        1
> dfValidStatus
  Status_1 Status_2
1        1        1
2        1        2
3        3        3
如何检查由状态_1和状态_2组成的dfItem的状态对是否处于dfValidPairs的有效状态之一? 最后,我希望只将dfItem中具有无效状态对的行存储在这样的新数据帧中

> dfInvalid
  ID Status_1 Status_2
1  3        2        1
2  5        2        3 
我只能想到遍历数据帧的for循环。你知道还有没有更多的可能吗

干杯, 费利克斯


对象的代码

> dfItem <- data.frame( c(1, 2, 3, 4, 5, 6), c(1, 1, 2, 3, 2, 1), c(1, 2, 1, 3, 3, 1) )
> colnames( dfItem ) <- c( "ID", "Status_1", "Status_2" )
> dfValidStatus <- data.frame( c(1, 1, 3), c(1,2,3) )
> colnames( dfValidStatus ) <- c( "Status_1", "Status_2" )

>dfItem colnames(dfItem)dfValidStatus colnames(dfValidStatus)这是一种合并类型,或者实际上是它的反面:

> library(dplyr)
> anti_join(dfItem, dfValidStatus)

Joining by: c("Status_1", "Status_2")
  ID Status_1 Status_2
1  5        2        3
2  3        2        1

其他有用的合并或设置操作是
内部连接
左连接
右连接

你好,Stephen,这正是我要找的。谢谢。