【问题标题】:Inserting character into variable names [duplicate]将字符插入变量名[重复]
【发布时间】:2017-09-25 09:34:08
【问题描述】:

我有一个带有变量名称的数据集,例如 FamId00ISCO8899,我想编写一个命令,在最后两位数字之前插入一个下划线,代表年份。最好的方法是什么?我已经尝试过regex,但我得到的进一步是:

gsub('.{2}$', '', varname)

这给了我:

FamId

如何添加'_' 和原来的最后两位数?另外,我在数据集中有最后两位数字没有年份的变量(即IDsex)。有没有办法让正则表达式不影响这些?

【问题讨论】:

  • 根据数据,您甚至可能需要sub("(?<!_)(\\d{2})$", "_\\1", varname, perl=TRUE)sub("(^|[^_])([0-9]{2})$", "\\1_\\2", varname)
  • 我看到这被标记为重复。我要删除这个问题吗?
  • 如果问题被标记为重复,您不必删除它们。这取决于你。
  • @Kenji 最好保留欺骗性问题,因为下次有人搜索时,Google 和查找帖子会更容易
  • 哦,好吧,那么标记它并投反对票有什么意义呢?到时候我就把它留在身边……

标签: r regex string


【解决方案1】:

我们不需要gsub,只需要sub 就足够了,因为这只是单个实例替换。将最后两个字符捕获为一个组 ((...)),并在替换中使用 _,后跟该捕获组的反向引用

sub("(.{2})$", "_\\1", varname)
#[1] "FamId_00"  "ISCO88_99"

. 是暗示任何字符的元字符。如果这需要具体,即数字,请使用 \\d{2} 代替 .{2}

数据

varname <- c("FamId00", "ISCO8899")

【讨论】:

  • 这样就可以了。事后看来,这似乎很简单,我不敢相信我没有在其他地方找到这个答案。
  • 另外,有没有办法阻止它对最后两位数字中没有数字的变量执行此操作?
  • @Kenji 如果你只想替换数字,那么sub("(\\d{2})$", "_\\1", varname)
【解决方案2】:

始终使用sub()gsub() 和不同模式的替代解决方案。

ids <- c("FamId00", "ISCO8899")
gsub("(^.*)([[:digit:]]{2}$)", "\\1_\\2", ids)
[1] "FamId_00"  "ISCO88_99"

【讨论】:

    猜你喜欢
    • 2018-12-04
    • 2011-03-22
    • 1970-01-01
    • 2017-10-22
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多