我有一个包含五位和九位数代码的邮政编码矢量。我想从长度为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))
答案 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
,这将有所帮助。