1

我有一个 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))

这是交易:我只对 df 中包含正好两个单词的行进行子集化/过滤感兴趣(在我的例子中,Xylopia brasiliensis 和 Xylosma tweediana)。我该如何进行?filter我在使用函数时失败了tidyverse

已经谢谢了。

4

1 回答 1

2

我们可以使用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+^\\w+$

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

base Rgrep

subset(df, grepl("^\\w+ \\w+$", sp_name))
               sp_name value
1 Xylopia brasiliensis     1
2    Xylosma tweediana     2
于 2021-11-12T16:05:45.453 回答