R, whether all the elements of X are present in Y

2020-04-10 21:26发布

问题:

In R, how do you test for elements of one vector NOT present in another vector?

X <- c('a','b','c','d')
Y <- c('b', 'e', 'a','d','c','f', 'c')

I want to know whether all the elements of X are present in Y ? (TRUE or FALSE answer)

回答1:

You want setdiff:

> setdiff(X, Y) # all elements present in X but not Y
character(0)

> length(setdiff(X, Y)) == 0
[1] TRUE


回答2:

You can use all and %in% to test if all values of X are also in Y:

all(X %in% Y)
#[1] TRUE


回答3:

A warning about setdiff : if your input vectors have repeated elements, setdiff will ignore the duplicates. This may or may not be what you want to do.

I wrote a package vecsets , and here's the difference in what you'll get. Note that I modified X to demonstrate the behavior.

 library(vecsets)
 X <- c('a','b','c','d','d')
 Y <- c('b', 'e', 'a','d','c','f', 'c')
 setdiff(X,Y)
   character(0)
 vsetdiff(X,Y)
[1] "d"


标签: r vector