#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
评论
如何获得所有的出现,而不仅仅是第一次出现?
–StatsSorceress
18 Mar 15 '18 at 0:54
也许我来晚了。其中(v,'b')。注意参数的顺序。
–尼古拉斯·默特奇(Niklas Mertsch)
18/12/19在19:40
您的which(v,'b')给我一条错误消息:>其中which(v,'b')的错误:'which'的参数不符合逻辑
–锈迹斑斑的
19年8月17日在10:08
语法是which(v == b)或任何其他逻辑运算符。在这种情况下,从此返回的值为2。如果v为c(“ b”,“ b”,“ c”,“ b”,“ d”),则返回((v == b))为1 2 4
–khtad
6月26日21:33
#2 楼
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
评论
我知道文档说is.element(x,y)等同于x%in%y。但是,我不知道为什么is.elements在混合整数和数字时起作用,而%in%不起作用
–pomber
2014年12月28日下午6:21
@pomber:您能举个例子吗?
–纪律
17年6月27日在6:24
@pomber是固定的吗?
–vasili111
19-09-21在23:28
较高的可读性是.element()与%in%是主观的。可以说一个中缀运算符更具可读性,因为它消除了参数顺序中的歧义。水果中的苹果很有意义,苹果中的水果却没有。 is.element(苹果,水果)或is.element(水果,苹果)可能都正确,这取决于is.element函数的实现。
–rileymcdowell
1月3日在16:36
#3 楼
我将根据输出对选项进行分组。对于所有示例,假定以下向量。v <- c('z', 'a','b','a','e')
检查存在性:
%in%
> 'a' %in% v
[1] TRUE
any()
> any('a'==v)
[1] TRUE
is.element()
> is.element('a', v)
[1] TRUE
用于查找首次出现:
match()
> match('a', v)
[1] 2
用于查找所有出现的索引向量:
which()
> which('a' == v)
[1] 2 4
用于查找所有出现的逻辑矢量:
==
> 'a' == v
[1] FALSE TRUE FALSE TRUE FALSE
编辑:
出于注释中提到的原因,从列表中删除grep()和grepl()
评论
如此处已注释,请勿使用grep()或正则表达式查找完全匹配。
– Uwe
17年6月13日在10:04
#4 楼
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
评论
请注意,这与%in%的行为不同:any(1 == NA)返回NA,其中1%in%NA返回FALSE。
–user3603486
17年3月23日在1:34
@ user3603486:any(1 == NA,na.rm = TRUE)返回FALSE。
– AkselA
19年4月23日在20:57
#5 楼
您可以使用%in%
运算符:vec <- c(1, 2, 3, 4, 5)
1 %in% vec # true
10 %in% vec # false
#6 楼
另外,要找到可用作“”元素的位置,并找到目标向量中不包含的元素,可以这样做:
pop <- c(3,4,5,7,13)
which(pop==13)
评论
实际上有时是可取的,因为与匹配不同,它可以为您提供所有匹配位置(作为数组)。尽管这可能不是OP要求的,但不同于stackoverflow.com/questions/1169388/…
–嘶嘶声
2015年2月7日在16:27
如果您只想查找不在Tset中的元素,为什么要打扰呢?您可以直接索引pop; pop [!pop%in%Tset]
–豪舍特
17年2月20日在23:11
#7 楼
我真的很喜欢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
这些函数区分大小写。
评论
默认情况下,grep将正则表达式作为其第一个元素,因此要使用“ ^ e $”或“ add”(固定为TRUE)对“ b”进行精确匹配。
– reinierpost
16年1月7日在7:45
请勿将正则表达式用于完全匹配。这很危险,可能会产生意想不到的结果
–大卫·阿伦堡(David Arenburg)
16 Sep 10'在17:54
是的,这是一个糟糕的,无用的,非常糟糕的主意-效率低下并且一定会被打破。例如。 myvar <-'blah';即使'b'不在myvar中,grepl('b',myvar,fixed = TRUE)也会返回TRUE。
–user3603486
17 Mar 23 '17 at 1:31
评论
有时我会问自己为什么R只是不使用包含这个词来使用户更容易认为“包含”包含在“ conta(in)s”中;我认为在这种情况下,“中”是一个相当简洁的竞争者
也许是在侧面加上了%符号。在for循环中,in中的单词是R中保留的单词。
@ greg121 dplyr已经具有一个contains函数,但是它具有不同的用途:在数据框中选择一列。例如select(iris,contains(“ etal”)))。
对于给定精度的实数值,是否有一种简便的方法?