我有一个数据集,其位置由这样的字母数字代码定义:
locations<-c('25N35W1', '25N36W1', '25N6W1')
presence<-c(0, 1, 0)
df<-cbind.data.frame(locations, presence)
大多数代码都有7位数字,就像上面的前两位一样,但是其中一些只有6位数字。我想在所有具有六位数字的代码的第三位数字之后添加一个零,同时保留七位数字的代码不变。有人知道怎么做这个吗?谢谢!
答案 0 :(得分:2)
我们可以使用以下正则表达式插入0。这还有一个额外的优势,即它可以检查您的其余位置代码的格式是否正确:
df$locations <- sub('(?i)(\\d{2}[a-z])(\\d[a-z]\\d)', '\\10\\2', df$locations)
输出:
> df
locations presence
1 25N35W1 0
2 25N36W1 1
3 25N06W1 0
答案 1 :(得分:1)
使用paste0
和substr
ind = which(nchar(locations) == 6)
locations[ind] = paste0(substr(locations[ind], 1, 3), "0", substr(locations[ind], 4, 6))