如何检查一个向量是否包含给定的值?
match()(返回第一个外观)和%in%(返回一个布尔值)函数都是为此设计的。
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%相同
is.element()
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
另一个检查向量中是否存在元素的选项是使用inops 包中的%in{}%语法,如下所示:
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