【问题标题】:extract numerical suffixes from strings in R从R中的字符串中提取数字后缀
【发布时间】:2015-03-09 17:27:43
【问题描述】:

我有这个字符向量:

variables <- c("ret.SMB.l1", "ret.mkt.l1", "ret.mkt.l4", "vix.l4", "ret.mkt.l5" "vix.l6", "slope.l11",  "slope.l12", "us2yy.l2")

期望的输出:

> suffixes(variables)
[1] 1 1 4 4 5 6 11 12 2

换句话说,我需要一个函数来返回一个显示后缀的数字向量(每个后缀的长度为 1 或 2 位)。请注意,我需要一些可以处理大量字符串的东西,这些字符串在中间的某个地方可能有也可能没有数字。数字后缀的范围从 1 到 99。

非常感谢

【问题讨论】:

  • 这些答案都使用正则表达式(“正则表达式”,带有.* 的部分等),如果您经常遇到此类问题,您可能需要仔细阅读。在 R 中键入 ?regex 是一个不错的起点。

标签: r string character


【解决方案1】:

只需使用gsub:

> gsub(".*?([0-9]+)$", "\\1", variables)
[1] "1"  "1"  "4"  "4"  "5"  "6"  "11" "12" "2" 

如果您希望结果为数字,请将其包装在 as.numeric 中。

【讨论】:

    【解决方案2】:

    你可以使用sub函数。

    > variables <- c("ret.SMB.l1", "ret.mkt.l1", "ret.mkt.l4", "vix.l4", "ret.mkt.l5" ,"vix.l6", "slope.l11",  "slope.l12", "us2yy.l2")
    > sub(".*\\D", "", variables)
    [1] "1"  "1"  "4"  "4"  "5"  "6"  "11" "12" "2" 
    

    .*\\D 匹配从开始到最后一个非数字字符的所有字符。用空字符串替换那些匹配的字符将为您提供所需的输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 2017-02-17
      相关资源
      最近更新 更多