仅过滤一列中恰好包含两个字符串的行

Filter only rows that contain exact two strings in a column

我有一个 data.frame 如下:

df = data.frame(sp_name = c("Xylopia brasiliensis", "Xylosma tweediana", "Zanthoxylum fagara subsp. lentiscifolium", "Schinus terebinthifolia var. raddiana", "Eugenia"), value = c(1, 2, 3, 4, 5))

这是交易:我只对 subsetting/filtering df 中包含 正好 两个词的行感兴趣(在我的例子中,Xylopia brasiliensis 和 Xylosma tweediana) .我该如何进行?我在使用 tidyverse

中的 filter 函数时失败得很惨

已经谢谢了。

我们可以使用str_countfilter

中创建一个逻辑向量
library(dplyr)
library(stringr)
df %>% 
    filter(str_count(sp_name, "\w+") == 2)

-输出

               sp_name value
1 Xylopia brasiliensis     1
2    Xylosma tweediana     2

或者这也可以用 str_detect 来完成 - 从开头匹配单词 (\w+) (^),然后是 space 和另一个单词(\w+) 在字符串的末尾 ($)

df %>%
    filter(str_detect(sp_name, "^\w+ \w+$"))

或在 base R 中与 grep

subset(df, grepl("^\w+ \w+$", sp_name))
               sp_name value
1 Xylopia brasiliensis     1
2    Xylosma tweediana     2