Чтение только в части Stata.Файл DTA в R
Я заранее извиняюсь, если это где-то простой ответ. Это похоже на то, что было бы, но я не могу найти его в файлах справки, выполнив поиск так или с помощью Googling.
Я работаю с некоторыми наборами данных, которые сейчас несколько ГБ. Этого достаточно, чтобы поместиться в памяти на одном из узлов кластера, к которому у меня есть доступ, но занимает довольно много времени для загрузки. Для многих операций отладки / программирования с этими данными мне не нужен весь загруженный файл, просто первые несколько тысяч наблюдений, чтобы иметь набор данных для тестирования кода. Конечно, я могу просто прочитать весь файл и подмножество, но мне было интересно, есть ли способ сказать read.dta()
читать только в первых n строках? Это, конечно, будет намного быстрее.
Я тоже мог бы использовать правильный формат .CSV, а затем использовать read.csv()
аргумент nrows, но тогда я потеряю метки факторов в наборе данных Stata (и должен воссоздать довольно много ГБ данных из чужого кода, который подпитывая этот проект. Таким образом, прямое решение .файлы dta предпочтительнее.
3 ответов
двоичные файлы Stata записываются строка за строкой, поэтому вы можете изменить на stataread.c
чтобы ограничить количество строк, прочитанных в. Однако это будет работать, только если вам не нужны метки значений, потому что они записаны в конце файла и потребуют, чтобы вы прочитали весь файл, что не сэкономит время.
Это будет трудно, так как do_readStata
функция под капотом-это скомпилированный код, способный принимать только весь файл. Я считаю, что в целом двоичные файлы трудно читать строка за строкой, и .dta
- это двоичный формат. Также собственный двоичный формат R не позволяет выбирать количество строк из набора данных при чтении.
на мой скромный взгляд, вы можете лучше просто создать набор тестовых файлов из Stata (например, код Stata sample 1000, count
будет дадут вам образец 1000 наблюдений из загруженного набора данных), и работать с ними. И если у вас нет доступа к Stata, кто-то другой в проекте должен быть в состоянии сделать это за вас.
чтобы следить за Joris Meys: для такого рода вещей я использую "тестовый" набор данных и "реальный" набор данных, каждый в отдельных папках. Я держу макрос в верхней части .сделайте файл (с инструкциями if/then ниже), чтобы (1) взять образец данных и (2) указать ввод/вывод в правую папку, содержащую тот или иной. Я, вероятно, делаю это по-разному для каждого проекта, но что-то вроде этого:
создание данных .do file
blah blah blah
save using data/myfile.dta
save if uniform()<.05 using test_data/myfile.dta // or bsample, then save for panel data
анализ .do файл
local test = "test_"
// when you're ready to run the file with all the data, use the following
// local test = ""
use `test'data/myfile.dta
blah blah blah
outreg2 ... using `test'output/mytable.txt