R中是否有一种方法可以在包含单词的列中查找值?例如,我要查找包含单词“ the”的所有值,其中列的某些值是“ the_cat”,“ the_dog”和“ dog”
x <- c("the_dog", "the_cat", "dog")
使用上面的示例,答案将是2。 我知道这在Python中相对容易实现,但是我想知道是否有一种方法可以在R中实现。谢谢!
答案 0 :(得分:1)
尝试:
sum(grepl("(?<![A-Za-z])the(?![A-Za-z])", x, perl = T))
这在您的示例中为2。
但是让我们考虑一个稍微复杂一点的例子:
x <- c("the_dog", "the_cat", "dog", "theano", "menthe", " the")
输出:
[1] 3
以上,我们尝试匹配之前或之后没有其他字母的任何the
(例如theano
)。
您还可以在[]
内添加其他您不希望匹配的内容,例如如果您不考虑将the99
用作词the
,则可以使用[A-Za-z0-9]
等。
例如,您也可以在stringr
中使用以上内容(我已经排除了数字,因此the99
以下不会被视为一个单词):
library(stringr)
sum(str_detect(x, "(?<![A-Za-z0-9])the(?![A-Za-z0-9])"))
答案 1 :(得分:0)
library(stringr)
##with a vector
sum(str_detect(c("the_dog", "the_cat", "dog"),"the"))
##In a dataframe
tibble(x = c("the_dog", "the_cat", "dog")) %>%
filter(str_detect(x, "the")) %>%
nrow()
答案 2 :(得分:0)
x <- c("the_dog", "the_cat", "dog")
stringr::str_detect(x, "the")
#> [1] TRUE TRUE FALSE
由reprex package(v0.2.1)于2019-02-23创建
答案 3 :(得分:0)
也尝试:
x <- c("the_dog", "the_cat", "dog")
sum(stringi::stri_count(x,regex="^the"))#matches the at the beginning
结果:
[1] 2
或者:
x <- c("the_dog", "the_cat", "dog")
sum(stringi::stri_count(x,regex="the{1,}"))#matches any the