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

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


#1楼

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

#2楼

您可以使用%in%运算符:

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

#3楼

any()函数使代码可读

> 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

#4楼

还可以找到元素“哪个”的位置,该位置可以用作

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))]

#5楼

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

#6楼

为此,我真的很喜欢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

这些功能区分大小写。


#7楼

我将根据输出对选项进行分组。 对于所有示例,假定以下向量。

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

为了找到所有出现的逻辑向量

==

> 'a' == v
[1] FALSE  TRUE FALSE  TRUE FALSE

编辑:出于注释中提到的原因,从列表中删除grep()grepl()

发布了0 篇原创文章 · 获赞 2 · 访问量 5929

猜你喜欢

转载自blog.csdn.net/asdfgh0077/article/details/104058496
今日推荐