如何在R中为人口普查Tract FIPS代码补前导零至11位?
给FIPS代码补前导零到11位的解决办法
为啥你之前的代码出错?
你直接把整个数据框b1传给str_pad了,但这个函数只认单个字符向量,不认数据框对象。所以它只能把整个列强行转成字符串输出,还弹出了警告,根本没完成你想要的补零操作。
正确的做法
用stringr包:指定处理数据框里的目标列
直接提取b1中的geocode1列(这才是符合要求的字符向量),再传入str_pad处理:
library(stringr) # 给geocode1列补前导零,统一到11位 b1$geocode1 <- str_pad(b1$geocode1, width = 11, side = "left", pad = "0") # 查看处理后的结果 print(b1)
运行后,所有不足11位的代码会自动补上前导零(比如10位的"9001990000"会变成"09001990000"),已经是11位的代码则保持不变。
不想装stringr?用Base R的sprintf也行
如果不想额外加载包,用Base R自带的sprintf函数同样能实现需求:
b1$geocode1 <- sprintf("%011s", b1$geocode1)
这里%011s的含义是:将字符串格式化为11位长度,不足的部分用前导零填充。
处理后的示例结果
拿你提供的10行数据来说,处理完后geocode1列的结果如下:
# A tibble: 10 × 1 geocode1 <chr> 1 09001990000 2 09007990100 3 09009990000 4 09011990100 5 23005990000 6 23009990000 7 23013990000 8 23015990000 9 23023990000 10 23029990000
前4条10位的代码都补上了一个前导零,完全符合11位的要求,77000+行数据这么处理也能高效完成。
内容的提问来源于stack exchange,提问作者RinconArtist
相关产品推荐
相关产品推荐

