有条件的去除

时间:2018-07-09 04:01:11

标签: r dataframe

我有一个数据框,其中有一列字符具有以下格式:数字部分(通常为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。

提前谢谢!

2 个答案:

答案 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"