【问题标题】:Add leading zero to badly formatted ZIP code [duplicate]将前导零添加到格式错误的邮政编码[重复]
【发布时间】:2016-05-07 11:15:31
【问题描述】:

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

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

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 中的这些邮政编码?

【问题讨论】:

  • 如果它们是数字 sprintf("%05d", c(1234, 01234, 12345)) 有效,但取决于您的平台 sprintf("%05s", c('1234', '01234', '12345')) 有时仅适用于字符串
  • 对于尾随零,这是另一个欺骗链接stackoverflow.com/questions/33656576/…
  • @RichardScriven 在尾随的零上找到了不错的骗局——由于某种原因,我在搜索谷歌时找不到。
  • 我想通了。谢谢。

标签: r for-loop data-manipulation


【解决方案1】:
sapply(zip, function(x){if(nchar(x)<5){paste0(x,0)}else{x}})
#zip = a vector

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多