我想从向量中排除指定列表中的元素,即删除该向量中出现在排除列表中的元素。
我不知道元素是否已经丢失,因此通过-which(v %in% excludes)删除元素将导致整个向量在没有出现在该向量的情况下被清除。
我怎样才能以一种安全而优雅的方式做到这一点呢?我是否应该使用布尔(logical)掩码,或者是否有一种更优雅的方法?
v <- c("things", "sometimes", "go", "awry", "quickly")
excludes <- c("sometimes", "quickly")
v <- v[-which(v %in% excludes)]
v
# "things" "go" "awry"
which(v %in% excludes)
# Here `excludes` has already been removed, so v is cleared
v <- v[-which(v %in% excludes)]
v
# character(0)布尔掩码法
v <- c("things", "sometimes", "go", "awry", "quickly")
excludes <- c("sometimes", "quickly")
v <- v[!v %in% excludes]
v <- v[!v %in% excludes] # perform the removal a second time
v # contains desired value
# "things" "go" "awry" 发布于 2022-03-04 16:23:42
如果没有副本,请使用setdiff
setdiff(v, excludes)
[1] "things" "go" "awry" 或者有重复的,vsetdiff
library(vecsets)
vsetdiff(v, excludes)https://stackoverflow.com/questions/71354272
复制相似问题