【问题标题】:select multiple characters before one same character (R)在一个相同字符之前选择多个字符 (R)
【发布时间】:2021-10-06 07:17:27
【问题描述】:

我的例子如下:

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

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

期望的输出

                                     x                  
1                   Santiria laevigata  
2                   Santiria laevigata
3                   Santiria laevigata 

【问题讨论】:

标签: r tidyverse stringr


【解决方案1】:

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

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

【讨论】:

  • .* 表示 Blume 背后的一切?
  • 谢谢你,当我申请str_remove函数时效果很好
  • 由于我们使用的是'Blume.*',这意味着在 Blume 之后删除所有内容。你也可以在str_remove 中使用它。 str_remove(df$x, 'Blume.*')
【解决方案2】:

只需使用gsub

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

                    x
1 Santiria laevigata 
2  Santiria laevigata
3 Santiria laevigata 

【讨论】:

  • 谢谢!它的措辞很好。
【解决方案3】:

您可以尝试将 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"))

【讨论】:

    【解决方案4】:

    我们可能会使用word

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

    【讨论】:

    • 我使用的是word。但是,只有一件事让我改变了主意。我的数据中有很多分辨率差的物种(例如genus HR1genus G H 1)。此外,有些物种只有一个字符。所以,我不认为word 在这里是个不错的选择
    • @Anh 是的,你是对的。我以为您只有与示例中类似的情况
    猜你喜欢
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多