【问题标题】:select string after second space在第二个空格后选择字符串
【发布时间】:2021-12-01 15:02:48
【问题描述】:

我有一列包含不同的名称,我想获取第二个字符空格之后的所有字符串。

我的例子。

df <- data.frame(col = c("Adenia macrophylla", "Adinobotrys atropurpureus (Wall.) Dunn", "Ardisia purpurea Reinw. ex Blume"))

我想要这样的结果

                                     col
1                                    
2                           (Wall.) Dunn
3                        Reinw. ex Blume

对我有什么建议吗?我之前做的方法是separate他们和unite,但我考虑我们是否有更好的方法或更好的方法,因为我已经有很多专栏了。

更新 解决就好了

xx %>% 
  mutate(col = str_pad(col, 20,"right")) %>% 
  mutate(col = str_remove(col, '\\w+\\s\\w+\\s'))

感谢@Ronak 和@U12-Forward 为我提供regex

【问题讨论】:

    标签: r regex tidyverse


    【解决方案1】:

    你可以使用sub -

    sub('\\w+\\s\\w+\\s', '', df$col)
    #[1] "(Wall.) Dunn"    "Reinw. ex Blume"
    #Also
    #sub('.*?\\s.*?\\s', '', df$col)
    

    如果您想要tidyverse 的答案。

    library(dplyr)
    library(stringr)
    
    df %>% mutate(val = str_remove(col, '\\w+\\s\\w+\\s'))
    

    【讨论】:

      【解决方案2】:

      如果您想在 n 个空格之后选择字符串,最好在 sub 中使用重复。

      sub("([^ ]* ){2}(.*)|.*", "\\2", df$col)
      #sub("([^ ]* ){2}|.*", "", df$col, perl=TRUE) #Alternative
      #[1] ""                "(Wall.) Dunn"    "Reinw. ex Blume"
      

      [^ ] 获取所有内容但不获取空格 * 0 到 n 次, 匹配空格,{2} 匹配两次,.* 匹配所有内容。

      【讨论】:

      • 非常感谢。
      【解决方案3】:

      或者使用这个正则表达式:

      df$col <- sub('^\\S+\\s+\\S+', '', df$col)
      

      输出df:

      > df
                     col
      1                 
      2     (Wall.) Dunn
      3  Reinw. ex Blume
      > 
      

      【讨论】:

      • 我们可以做例如添加一个字符的右外部空间,并删除第二个空格之前的所有内容,正如您和@Ronak 提到的那样吗?
      • @Anh 你的意思是sub('^\\S+\\s+\\S+', ' ', df$col)
      猜你喜欢
      • 2017-05-06
      • 2016-03-26
      • 2022-12-06
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 1970-01-01
      相关资源
      最近更新 更多