我有一个带有变量名称的数据集,例如FamId00
和ISCO8899
,并希望编写一个命令,在最后两位数之前插入一个下划线,代表年份。这样做的最佳方式是什么?我试过regex
,但我得到的更多是:
gsub('.{2}$', '', varname)
给了我:
FamId
如何添加'_'
和原来的最后两位数字?另外,我在数据集中有变量,这些变量在最后两位数字中没有年份(即ID
和sex
)。有没有办法让正则表达式不影响那些?
答案 0 :(得分:1)
我们不需要gsub
只需sub
即可,因为这只是单个实例的替换。将最后两个字符作为一组((...)
)捕获,并在替换中使用_
,然后使用该捕获组的反向引用
sub("(.{2})$", "_\\1", varname)
#[1] "FamId_00" "ISCO88_99"
.
是一个暗示任何角色的元字符。如果需要具体即数字,请使用\\d{2}
代替.{2}
varname <- c("FamId00", "ISCO8899")
答案 1 :(得分:0)
替代解决方案始终使用sub()
或gsub()
以及不同的模式。
ids <- c("FamId00", "ISCO8899")
gsub("(^.*)([[:digit:]]{2}$)", "\\1_\\2", ids)
[1] "FamId_00" "ISCO88_99"