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() 没有解决我的问题

4

2 回答 2

1

不是更有效,但更正确:

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

-如果没有重复,使用索引将导致不正确的结果 - 比如说check <- rbind(c(1,0),c(9,9))

编辑:

或互换pathcheckrbind()fromLast=TRUE

new.check <- check[ setdiff(1:nrow(check),which(duplicated(rbind(check,path),fromLast=T))),]
于 2013-04-17T10:13:00.107 回答
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 ,]
于 2013-04-17T12:15:19.157 回答