编辑:我只是看了一些更多的ZIP代码在我的文件中,并了解到这是一个前导零这些代码丢失。
我有一堆邮政编码,格式如下:
zip
8974
8974
4350
4350
7623
55111
98769
正如您所看到的,由于格式化问题,它们缺少满足5位邮政编码要求的最后一个0
。
我想这么做:
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中的这些ZIP码中?
发布于 2016-01-29 08:40:42
你确定他们错过了最后的0,而不是初始0吗?数字中的最后零是有意义的,而前导零对数字的值没有任何影响,因此R会删除它。
我建议的是将数据转换为字符或因子,然后使用一个函数对小于10000的邮政编码添加零(因此只有四位数,而不是所需的5位数)。看起来会是这样的:
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
无论哪种方式,您都不需要将邮政编码保留为数字值,因为您不应该对它们执行数学操作。它们只是地理标签,所以把它们作为字符或因素不应该引起任何问题。
发布于 2016-01-29 08:37:27
sapply(zip, function(x){if(nchar(x)<5){paste0(x,0)}else{x}})
#zip = a vector
这应该能行。这将在所有<5个字符长的东西上放置一个尾随"0“。如果要放置前导0,请使用paste0(0,x)
代替。
输出将是字符串的向量。
https://stackoverflow.com/questions/35089279
复制相似问题