仅过滤一列中恰好包含两个字符串的行
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_count
在filter
中创建一个逻辑向量
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
我有一个 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_count
在filter
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