基于另一个数组过滤一个数组

时间:2013-04-17 09:37:00

标签: r

我有两个数组'check'和'path',我希望只选择那些在路径中不存在的元素。我是按照以下方式完成的,有没有更有效的方式来做呢?

check<-rbind(c(1,0),c(0,1),c(9,9))
path<-rbind(c(1,1),c(1,2),c(0,1),c(10,10))
new.check<-check[-(which(duplicated(rbind(path,check)))-nrow(path)),]

setdiff()没有解决我的问题

2 个答案:

答案 0 :(得分:1)

效率不高,但更正确:

new.check <- check[ setdiff(1:nrow(check),(which(duplicated(rbind(path,check)))-nrow(path))),]

如果没有重复项,使用-索引会导致错误的结果 - 例如check <- rbind(c(1,0),c(9,9))

编辑:

或在path中交换checkrbind()并使用fromLast=TRUE

new.check <- check[ setdiff(1:nrow(check),which(duplicated(rbind(check,path),fromLast=T))),]

答案 1 :(得分:0)

使用setdiff和%in%

的另一种方法
# get the elements in check that are not present in path
elements <- setdiff(unique(as.vector(check)),unique(as.vector(path)))
# convert check to data frame to access columns by name
checkd <- data.frame(check)
# check if either column has the required elements - if yes, extract that row
checkd[checkd$X1 %in% elements | checkd$X2 %in% elements ,]