如何检查一个向量是否包含给定的值?
当前回答
为此,我非常喜欢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
这些函数区分大小写。
其他回答
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
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
我将根据输出对选项进行分组。对于所有的例子,假设下面的向量。
v <- c('z', 'a','b','a','e')
检查是否存在:
%in%
> '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()
为此,我非常喜欢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
这些函数区分大小写。
检查vector中是否存在元素的另一个选项是使用inops包中的{}%语法中的%,如下所示:
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包于2022-07-16创建(v2.0.1)
推荐文章
- 为什么使用purrr::map而不是lapply?
- 如何在data.table中按名称删除列?
- 连接两个向量的最佳方法是什么?
- 当启用c++ 11时,std::vector性能回归
- 将data.frame从宽格式调整为长格式
- 计算移动平均线
- std::vector比普通数组慢很多吗?
- 在R中同一行打印字符串和变量内容
- 使用pandoc从Markdown转换为PDF时设置空白大小
- ggplot2折线图给出“geom_path:每组只包含一个观测值。你需要调整群体审美吗?”
- 在c++中使用数组或std::vector,性能差距是什么?
- 导入文本文件为单字符字符串
- 移除jupyter笔记本上的内核
- 提取一个dplyr tbl列作为向量
- 如何在R中绘制两个直方图?