【问题标题】:Extract Between Parts of a String在字符串的各个部分之间提取
【发布时间】:2017-07-11 15:26:09
【问题描述】:

我有一串名字,格式如下:

names <- c("Q-1234-1", "Q-1234-2", "Q-1234-1-8", "Q-1234-2-8")

我正在尝试提取第二个连字符后的单个数字。在某些情况下,名称末尾会有第三个连字符和一个附加数字。期望的输出是:

1, 2, 1, 2

我假设我需要使用 sub/gsub 但不确定从哪里开始。有什么建议吗?

【问题讨论】:

    标签: r extract gsub


    【解决方案1】:

    我们可以使用sub 来匹配零个或多个不是- ([^-]*) 字符的模式,从字符串的开头 (^) 后跟 - 后跟零或多个不是- 的字符,后跟- 和后面的数字被捕获为一个组。在替换中,我们使用捕获组的反向引用(\\1

    as.integer(sub("^[^-]*-[^-]*-(\\d).*", "\\1", names))
    #[1] 1 2 1 2
    

    或者可以修改为

    as.integer(sub("^([^-]*-){2}(\\d).*", "\\2", names))
    #[1] 1 2 1 2
    

    【讨论】:

      【解决方案2】:

      这是使用stringr的替代方法

      library("stringr")
      names <- c("Q-1234-1", "Q-1234-2", "Q-1234-1-8", "Q-1234-2-8")
      output = str_split_fixed(names, pattern = "-", n = 4)[,3]
      

      【讨论】:

        猜你喜欢
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-20
        • 2014-08-30
        • 1970-01-01
        • 2023-02-23
        • 1970-01-01
        相关资源
        最近更新 更多