我有一些人口普查的微数据文件存储为.txt并以ASCII编码。
当我在文本编辑器中打开它时,我会得到类似的结果:
1100015110001500100100003624008705865085282310200600101011022022 14 444231
等。
由于我对ASCII数据的制表没有任何考虑,我想知道是否有任何办法可以用R和/或我需要什么类型的补充软件来完成。
实际上起初我想对我的数据进行“正常”查看,比如说,如果可能的话,将其视为一个表格(文件大小在40mb到500mb之间变化)。然后我想做一些简单的计算,然后将结果存储为csv。在其他情况下使用它。
有人能给我一些建议吗?
答案 0 :(得分:7)
这个巴西人口普查网站提供了SAS输入脚本。仅使用SAS导入脚本导入ASCII数据集的最快方法是使用the SAScii package。您可以在this zipped file中找到SAS导入脚本 - 它是INPUT.txt。请注意,这些SAS导入指令的INPUT块在第四行之前不会启动,因此您的beginline
参数将为4.测试您是否正在首先使用?parse.SAScii
<正确读取SAS脚本/ p>
library(SAScii)
parse.SAScii( "INPUT.txt" , beginline = 4 )
一旦看到正确打印列名和宽度,就可以使用?read.SAScii
函数直接将文本文件读入R数据框
x <- read.SAScii( "filename.txt" , "INPUT.txt" , beginline = 4 )
head( x )
如果您的文件太大而无法完全读入RAM,则可以将其读入SQLite数据库。使用不在SAScii包中但在my github account here中找到的read.SAScii.sqlite()
函数 - 它只是read.SAScii()函数的一个小变化,但它不会使RAM过载。您可以在此united states government survey data set website上的下载脚本中查看其用法示例。
有关SAScii软件包的更多详细信息,请查看this overview
答案 1 :(得分:2)
一个很好的选择是包readr
,extremely fast solution来读取固定列宽数据。有关readr
here的更多信息。
因此,您可以使用基于read.SAScii
的更快的选项代替readr
。像这样:
# Load Packages
library(readr)
library(SAScii)
library(data.table)
# Parse input file
dic_pes2013 <- parse.SAScii("INPUT.txt")
setDT(dic_pes2013) # convert to data.table
# read to data frame
pesdata2 <- read_fwf("./Dados/PES2013.txt",
fwf_widths(dput(dic_pes2013[,width]),
col_names=(dput(dic_pes2013[,varname]))),
progress = interactive()
)
我在1.2分钟内阅读了240万条包含243个变量的记录(文件Amostra_Pessoas_35_outras.txt
)。
PS。如果您没有input.txt
个文件,here是关于如何创建它们的简短脚本。
请注意,某些变量具有小数,这些内容未包含在此处发布的答案中提供的解决方案中(至少到目前为止)。要考虑到这一点,我建议使用R
脚本here,这将帮助您下载2010年巴西人口普查数据集,将其读入数据框并将其另存为.csv
个文件。