Чтение данных PISA в R - ошибка read.table
Я пытаюсь прочитать данные из исследования PISA 2012 ( http://pisa2012.acer.edu.au/downloads.php) в R, используя функцию read.table. Это код, который я пробовал:
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/
Спасибо за вашу помощь!
2 ответа
Из первой строки видно, что для разграничения отдельных переменных вам понадобится какой-то контрольный файл. Итак, из работы с PISA в других средах я знаю, что первые три столбца соответствуют буквенному коду страны ISO 3 (например, ALB). Далее следуют цифры и буквы, которые нужно понимать смыслом, разделяя их. Вы можете использовать кодовую книгу для этого ( https://pisa2012.acer.edu.au/downloads/M_stu_codebook.pdf), но это реальный подход для каждой переменной. Почему бы не скачать в SPSS или sAS и импортировать? Не "гладкое" решение, но без контрольного файла вам придется много работать вручную.
Я просто читаю файлы, используя пакет 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: набор данных занимает около 1 Гб, поэтому вам потребуется достаточно оперативной памяти.