从超过一定长度的数字中删除最后一位数字

时间:2016-07-13 22:11:35

标签: r gsub maxlength

我有一个包含五位和九位数代码的邮政编码矢量。我想从长度为5的代码中删除结束数字。

例如,以下代码:

zip<-c(11566, 46235, 50467, 856073217, 97333, 856159229)

应该成为

zip
11566
46235
50467
85607
97333
85615

我在想gsub是解决这个问题的好方法,但我无法弄清楚如何为它编写代码。我试过这个,但它肯定不起作用。

df$zip<- gsub("\\d(!i:5)", "", as.character(df$zip))

2 个答案:

答案 0 :(得分:9)

这应该有效

zip<-c(11566, 46235, 50467, 856073217, 97333, 856159229)

> s <- substr(zip,1,5)
> s
[1] "11566" "46235" "50467" "85607" "97333" "85615"

> as.numeric(s)
[1] 11566 46235 50467 85607 97333 85615
> 

答案 1 :(得分:1)

我们可以使用sub。将前五个字符作为一组((.{5}))捕获,然后是其余字符。在替换中,我们用反向引用替换。

as.numeric(sub("(.{5}).*", "\\1", zip))
#[1] 11566 46235 50467 85607 97333 85615

为了清楚起见,substr方法会比sub更快。但是,由于帖子是关于使用gsub/sub,这将有所帮助。