【问题标题】:R variable string replacement in a data frame数据框中的R变量字符串替换
【发布时间】:2013-08-13 00:04:25
【问题描述】:

我有一个如下所示的数据框:

df <- data.frame(one=c("s1_below_10", "s2_below_20"), 
                 two=c("s3_above_10","s4_above_10"))

我想用第一个下划线前面的数字替换所有字符串。换句话说,期望的输出是

1   3
2   4

我想知道如何执行此替换(数据集非常大)。感谢您的帮助。

【问题讨论】:

    标签: string r replace


    【解决方案1】:

    基本的gsub 调用类似于:

    gsub("^.+?(\\d+)_.+","\\1",df$one)
    [1] "1" "2"
    

    您可以lapply 到每一列:

    data.frame(lapply(df, gsub, pattern="^.+(\\d+)_.+",replacement= "\\1"))
      one two
    1   1   3
    2   2   4
    

    【讨论】:

    • 上述模式只会抓取多位数字的最后一位(可能是想要的,也可能不是),因为第一个 '.+' 是贪婪的,并且会尽可能匹配。将 '.+' 更改为 '.+?' 的简单更正将使它不贪婪,并让 \\d+ 匹配多个数字。
    【解决方案2】:

    如果您想要的值是 always 字符串的第二个字符(您的所有示例似乎都是如此),您可以使用substr 执行此操作:

    data.frame(lapply(df, substr, 2, 2))
    

    输出:

      one two
    1   1   3
    2   2   4
    

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多