将前导零添加到格式错误的邮政编码

时间:2016-01-29 16:25:31

标签: r for-loop data-manipulation

编辑:我刚刚查看了我的文件中的一些邮政编码,并了解到这些代码缺失的领先零。

我有一堆格式如下的邮政编码:

zip
8974
8974
4350
4350
7623
55111
98769

正如您所看到的,由于格式问题,这些因缺少最后0来满足5位邮政编码要求。

我试图这样做:

attach(dat)

for(x in zip){
    if(nchar(x) < 5){
        x <- x*10
    }
}

我也试过这个:

for(x in zip){
    if(nchar(x) < 5){
        zip[x] <- x*10
    }
}

但两者都没有产生预期的结果。如何在R?

中为这些邮政编码添加零

2 个答案:

答案 0 :(得分:3)

sapply(zip, function(x){if(nchar(x)<5){paste0(x,0)}else{x}})
#zip = a vector

这应该有效。这将放置一个尾随&#34; 0&#34;在一切&lt; 5个字符长。如果您想要使用前导0使用paste0(0,x)

输出将是字符串向量。

答案 1 :(得分:1)

你确定他们错过 final 0,而不是 initial 0吗?数字中的最后一个零是有意义的,而前导零不会改变数字的值,并且会被R删除。

我建议将数据转换为字符或因子,然后使用函数为小于10000的邮政编码添加零(因此只有四位数,而不是所需的五位数)。它看起来像这样:

    zip <- c(8974, 8974, 4350, 4350, 7623, 55111, 87969)
    zip <- as.character(zip)
    for(i in 1:length(zip)){
        if(as.numeric(zip[i]) < 10000){
            zip[i] <- paste0("0", zip[i])
        }
    }
    zip

无论哪种方式,您都不应该将邮政编码保留为数字值,因为您不应该对它们进行数学运算。它们只是地理标签,因此将它们作为字符或因素不应该导致任何问题。