我正在尝试使用read.table函数将PISA 2012研究中的数据(http://pisa2012.acer.edu.au/downloads.php)读入R中。这是我试过的代码:
pisa <- read.table("pisa2012.txt", sep = "")
很遗憾,我不断收到以下错误消息:
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,
: line 2 did not have 184 elements
我试图设置
header = T
但随后收到以下错误消息
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,
:line 1 did not have 184 elements
最后,这就是.txt文件的样子......
http://postimg.org/image/4u9lqtxqd/
感谢您的帮助!
答案 0 :(得分:0)
您可以从第一行看到您需要某种控制文件来分隔各个变量。因此,从在其他环境中使用PISA开始,我知道前三列与ISO 3字母国家代码(例如,ALB)相对应。接下来是数字和字母,需要通过分离它们以一种有意义的方式理解。您可以使用代码簿(https://pisa2012.acer.edu.au/downloads/M_stu_codebook.pdf),但这对每个变量都是真正的负担。为什么不下载SPSS或sAS并导入?不是一个“光滑”的解决方案,但没有控制文件,你需要做很多手工工作。
答案 1 :(得分:0)
我刚刚使用readr包阅读了这些文件。那么你需要什么:readr包,TXT文件,SAScii包和相关的sas文件。
所以,假设你想阅读学生档案。然后,您将需要以下文件:INT_STU12_DEC03.txt和INT_STU12_DEC03.sas。
##################### READING STUDENT DATA ###################
## Loading the dictionary
dic_student = parse.SAScii(sas_ri = 'INT_STU12_SAS.sas')
## Creating the positions to read_fwf
student <- read_fwf(file = 'INT_STU12_DEC03.txt', col_positions = fwf_widths(dic_student$width), progress = T)
colnames(student) <- dic_student$varname
OBS 1:当我使用Linux时,我需要删除sas文件中的第一行并将编码更改为UTF-8。
OBS 2:删除的行是:
libname M_DEC03 "C:\XXX";
filename STU "C:\XXX\INT_STU12_DEC03.txt";
options nofmterr;
OBS 3:数据集大约需要1Gb,因此您需要使用大量的内存。