dplyr/tidy基于子字符串过滤向量的方法?
我们可以看到一些很好的例子;对于向量,是否有一种整洁的方法可以做到这一点?(即没有或类似) 例子 我尝试了在data.frame上工作的方法dplyr/tidy基于子字符串过滤向量的方法?,r,dplyr,R,Dplyr,我们可以看到一些很好的例子;对于向量,是否有一种整洁的方法可以做到这一点?(即没有或类似) 例子 我尝试了在data.frame上工作的方法 # Leave only words that don't begin with 'cat' vec <- c("cat", "catamaran", "dog", "mouse", "catacombs") vec %>% filter(s
# Leave only words that don't begin with 'cat'
vec <- c("cat", "catamaran", "dog", "mouse", "catacombs")
vec %>% filter(substr(1, 3) != "cat") # %>% ... etc
注
我们可以使用类似于vec%>%{.[!grepl(“cat”,)]}
,或者更准确地说是vec%>%{.[substr(,1,3)!=“cat”]}
,但我会尝试找到
{
和}
)vec%%>%过滤器(…)%%>%下一步操作
)grepl
方法使用原始向量(由
表示)两次(而理想情况下仅使用一次)我认为
tidyverse
更适合于数据帧/列表,而不是向量。如果要执行多个操作,则需要管道,但在这里,您可以使用单个函数(grep
)获得预期结果,而无需任何管道
grep('^cat', vec, value = TRUE, invert = TRUE)
#[1] "dog" "mouse"
或者将向量转换为数据帧,然后使用
library(dplyr)
library(tibble)
vec %>% enframe() %>% filter(!startsWith(value, 'cat'))
或
如果您不介意使用不同的软件包,可以使用
stringi
软件包中的stri\u detect\u fixed
功能
install.packages('stringi')
library(stringi)
vec <- c("cat", "catamaran", "dog", "mouse", "catacombs")
vec[stri_detect_fixed(vec, 'cat')]
然后,您应该能够将其传输到您想要的任何命令。使用
tidyverse
,我们可以将其转换为tibble
,在过滤器中使用stru-detect
和拉取值
library(dplyr)
library(stringr)
tibble(vec) %>%
filter(!str_detect(vec, "^cat")) %>%
pull(vec)
#[1] "dog" "mouse"
或使用magrittr
vec %>%
str_detect("^cat") %>%
`!` %>%
magrittr::extract(vec, .)
#[1] "dog" "mouse"
使用purrr
处理向量
library(purrr)
library(stringr)
vec <- c("cat", "catamaran", "dog", "mouse", "catacombs")
vec %>% discard(.p=str_detect, pattern = "^cat")
库(purrr)
图书馆(stringr)
向量%discard(.p=str_detect,pattern=“^cat”)
library(dplyr)
library(stringr)
tibble(vec) %>%
filter(!str_detect(vec, "^cat")) %>%
pull(vec)
#[1] "dog" "mouse"
vec %>%
str_detect("^cat") %>%
`!` %>%
magrittr::extract(vec, .)
#[1] "dog" "mouse"
library(purrr)
library(stringr)
vec <- c("cat", "catamaran", "dog", "mouse", "catacombs")
vec %>% discard(.p=str_detect, pattern = "^cat")