2013-04-17 175 views
0

我有兩個數組'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()並沒有解決我的問題

回答

1

不是更高效,更正確的:

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

使用-索引會導致不正確的結果,如果沒有重複 - 說check <- rbind(c(1,0),c(9,9))

編輯:

或互換pathcheckrbind()和使用setdiff和%在%的人使用fromLast=TRUE

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

另一種方式

# 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 ,]