我有一堆格式如下的邮政编码:
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?
中为这些邮政编码添加零答案 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
无论哪种方式,您都不应该将邮政编码保留为数字值,因为您不应该对它们进行数学运算。它们只是地理标签,因此将它们作为字符或因素不应该导致任何问题。