【问题标题】:Read ASCII, fixed-length fields/records with two record-delimiters使用两个记录分隔符读取 ASCII、固定长度字段/记录
【发布时间】:2020-06-05 20:23:31
【问题描述】:
很抱歉,如果这太宽泛了,但我正在努力加载存档的人口普查县商业模式数据。文件格式描述为,
“ASCII,固定长度的字段/记录,带有两个记录分隔符(回车和换行);记录长度包括分隔符。”
我尝试将其加载到 excel、R 和 Stata 中。我只是想以可读格式获取文件,以便以后可以使用。我尝试使用 read.fwf 将它读入 R,但我真的不清楚我应该使用什么宽度。我不太了解文件类型。我对 ASCII 文件不太熟悉,文件后缀并没有给我太多信息。任何建议将不胜感激。我在下面提供了我正在尝试使用的一组文件的链接。
https://catalog.archives.gov/id/873805
【问题讨论】:
标签:
r
excel
ascii
stata
census
【解决方案1】:
有些行的数据不好,所以我推荐 read_delim 包中的 readr
library(readr)
data <- read_delim("https://catalog.archives.gov/OpaAPI/media/873805/content/arcmedia/electronic-records/rg-029/cbp-files/RG029.CBP85.T2I1?download=true",
delim = " ", col_names = FALSE)
data
## A tibble: 32,970 x 6
# X1 X2 X3 #X4 X5 X6
# <dbl> <chr> <chr> #<dbl> <dbl> <chr>
# 1 11001 ---- " 00000003482800000011566200000049404800248400140400048300029200018300006600003400001600000500000100000100000000… 11000 23001 " 424…
# 2 11001 07-- "B00000000000000000000000000000000000000001700001200000300000100000100000000000000000000000000000000000000000000… 11000 23001 " 424…
# 3 11001 0700 "B00000000000000000000000000000000000000001500001000000300000100000100000000000000000000000000000000000000000000… 11000 23001 " 424…
# 4 11001 0720 "B00000000000000000000000000000000000000000200000000000000000100000100000000000000000000000000000000000000000000… 11000 23001 " 424…
# 5 11001 0740 " 00000000001900000000003500000000019100000500000300000200000000000000000000000000000000000000000000000000000000… 11000 23001 " 424…
# 6 11001 0750 "A00000000000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000… 11000 23001 " 424…
# 7 11001 0780 " 00000000001200000000002700000000035100000600000500000100000000000000000000000000000000000000000000000000000000… 11000 23001 " 424…
# 8 11001 0800 "A00000000000000000000000000000000000000000200000200000000000000000000000000000000000000000000000000000000000000… 11000 23001 " 424…
# 9 11001 10-- "A00000000000000000000000000000000000000000200000100000000000100000000000000000000000000000000000000000000000000… 11000 23001 " 424…
#10 11001 1400 "A00000000000000000000000000000000000000000200000100000000000100000000000000000000000000000000000000000000000000… 11000 23001 " 424…
## … with 32,960 more rows
【解决方案2】:
我们可以在base R 中使用read.table 和fill = TRUE
data <- read.table("https://catalog.archives.gov/OpaAPI/media/873805/content/arcmedia/electronic-records/rg-029/cbp-files/RG029.CBP85.T2I1?download=true", fill = TRUE)
-输出
str(data)
#data.frame': 32970 obs. of 6 variables:
# $ V1: int 11001 11001 11001 11001 11001 11001 11001 11001 11001 11001 ...
# $ V2: chr "----" "07--" "0700" "0720" ...
# $ V3: chr "000000034828000000115662000000494048002484001404000483000292000183000066000034000016000005000001000001000000000000000000" "B000000000000000000000000000000000000000017000012000003000001000001000000000000000000000000000000000000000000000000000000" "B000000000000000000000000000000000000000015000010000003000001000001000000000000000000000000000000000000000000000000000000" "B000000000000000000000000000000000000000002000000000000000001000001000000000000000000000000000000000000000000000000000000" ...
# $ V4: int 11000 11000 11000 11000 11000 11000 11000 11000 11000 11000 ...
# $ V5: int 23001 23001 23001 23001 23001 23001 23001 23001 23001 23001 ...
# $ V6: int 4243 4243 4243 4243 4243 4243 4243 4243 4243 4243 ...