测试向量是否包含给定元素

如何检查一个向量是否包含给定的值?

899373 次浏览

match()(返回第一个外观)和%in%(返回一个布尔值)函数都是为此设计的。

v <- c('a','b','c','e')


'b' %in% v
## returns TRUE


match('b',v)
## returns the first location of 'b', in this case: 2

你可以使用%in%操作符:

vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false

任何()函数使代码具有可读性

> w <- c(1,2,3)
> any(w==1)
[1] TRUE


> v <- c('a','b','c')
> any(v=='b')
[1] TRUE


> any(v=='f')
[1] FALSE

还要找到元素"可用作

pop <- c(3, 4, 5, 7, 13)


which(pop==13)

为了找到目标向量中不包含的元素,可以这样做:

pop <- c(1, 2, 4, 6, 10)


Tset <- c(2, 10, 7)   # Target set


pop[which(!(pop%in%Tset))]

is.element()使代码更具可读性,与%in%相同

v <- c('a','b','c','e')


is.element('b', v)
'b' %in% v
## both return TRUE


is.element('f', v)
'f' %in% v
## both return FALSE


subv <- c('a', 'f')
subv %in% v
## returns a vector TRUE FALSE
is.element(subv, v)
## returns a vector TRUE FALSE

为此,我非常喜欢grep()和grepl()。

Grep()返回一个整数向量,表示匹配的位置。

yo <- c("a", "a", "b", "b", "c", "c")


grep("b", yo)
[1] 3 4

grepl()返回一个逻辑向量,在匹配的位置有"TRUE"。

yo <- c("a", "a", "b", "b", "c", "c")


grepl("b", yo)
[1] FALSE FALSE  TRUE  TRUE FALSE FALSE

这些函数区分大小写。

我将根据输出对选项进行分组。对于所有的例子,假设下面的向量。

v <- c('z', 'a','b','a','e')

用于检查是否存在:

%, %

> 'a' %in% v
[1] TRUE

任何()

> any('a'==v)
[1] TRUE

is.element ()

> is.element('a', v)
[1] TRUE

用于查找第一次出现的情况:

匹配()

> match('a', v)
[1] 2

用于查找所有作为指数向量的出现:

()

> which('a' == v)
[1] 2 4

# EYZ0:

= =

> 'a' == v
[1] FALSE  TRUE FALSE  TRUE FALSE
< p >编辑: 从列表中删除grep ()grepl (),原因在注释

另一个检查向量中是否存在元素的选项是使用inops 中的%in{}%语法,如下所示:

library(inops)
#>
#> Attaching package: 'inops'
#> The following object is masked from 'package:base':
#>
#>     <<-
v <- c('a','b','c','e')
v %in{}% c("b")
#> [1] FALSE  TRUE FALSE FALSE

reprex包 (v2.0.1)创建于2022-07-16