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