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

Add leading zero to badly formatted ZIP code

编辑:我刚刚查看了文件中的更多邮政编码,了解到它是一个 前导 零,这些代码丢失了。

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

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 中向这些邮政编码添加零?

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

这应该有效。这将在长度小于 5 个字符的所有内容上放置一个尾随“0”。如果要放置前导 0,请改用 paste0(0,x)

输出将是一个字符串向量。

您确定他们缺少 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

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