我有两个数组'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()没有解决我的问题
答案 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
中交换check
和rbind()
并使用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 ,]