我有一个数据框,其中有一列字符具有以下格式:数字部分(通常为4位数字)+点+一个或两个字母。例如:1111.AA
我希望R每当数字部分有5位数字时都删除第一个零。
这是一个小样本:
df <- structure(list(ID = c("1111.AA","2222.CC","7891.DD","00111.ZZ","00235.ZZ", "0057.A")),
.Names=c("ID"), row.names = c("1", "2", "3", "4", "5", "6"), class = ("data.frame"))
例如,00111.ZZ应该替换为0111.ZZ。
提前谢谢!
答案 0 :(得分:1)
我们可以使用sub
来匹配字符串开头(^
)的0,然后是作为一组([0-9]{4}
)捕获的四位数字((..)
)。后跟点(\\.
),然后替换为捕获组的后向引用(\\1
)
sub("^0([0-9]{4}\\.)", "\\1", df$ID)
#[1] "1111.AA" "2222.CC" "7891.DD" "0111.ZZ" "0235.ZZ" "0057.A"
答案 1 :(得分:1)
类似于akrun的答案,唯一的区别在于REGEX,因为OP要求也覆盖1或2个字母,因此也覆盖该部分。
sub("^0([0-9]{4}\\.[a-zA-Z]{1,2})","\\1",df$ID)
输出如下。
> sub("^0([0-9]{4}\\.[a-zA-Z]{1,2})","\\1",df$ID)
[1] "1111.AA" "2222.CC" "7891.DD" "0111.ZZ" "0235.ZZ" "0057.A"