select 一个相同字符前的多个字符 (R)

select multiple characters before one same character (R)

我的例子如下:

df <- data.frame(x = c("Santiria laevigata Blume f. laevigata", 
                 "Santiria laevigata", 
                 "Santiria laevigata Blume f. glabrifolia (Engl.) H.J.Lam"))

                                                        x
1                   Santiria laevigata Blume f. laevigata
2                                      Santiria laevigata
3 Santiria laevigata Blume f. glabrifolia (Engl.) H.J.Lam

我只想通过使用 string 获得 Santiria laevigata 表示我将保留 Blume 之前的每个字母,换句话说,我将删除从 Blume 开始的所有字符. 对我有什么建议吗?

期望的输出

                                     x                  
1                   Santiria laevigata  
2                   Santiria laevigata
3                   Santiria laevigata 

您可以使用 sub 删除 Blume.* 中的所有内容。

df$y <- trimws(sub('Blume.*', '', df$x))
df$y
#[1] "Santiria laevigata" "Santiria laevigata" "Santiria laevigata"

只需使用gsub

df$x <- gsub("Blume.+", "", df$x)

                    x
1 Santiria laevigata 
2  Santiria laevigata
3 Santiria laevigata 

您可以尝试将 df 更改为

df <-  c("Santiria laevigata Blume f. laevigata", 
             "Santiria laevigata", 
             "Santiria laevigata Blume f. glabrifolia (Engl.)    H.J.Lam"))

然后输入如下

new_df <- substr(df,1,18)
new_df

[1] "Santiria laevigata" "Santiria laevigata" "Santiria laevigata"

我不知道如何使用

data.frame(x = c("abc"))

我们可以使用word

library(stringr)
word(df$x, 1, 2)
[1] "Santiria laevigata" "Santiria laevigata" "Santiria laevigata"