Индексировать элементы большого файла CSV при чтении построчно
Я читаю большой файл CSV (>15 ГБ) построчно в R. Я использую
con <- file("datafile.csv", open = "r")
while (length(oneLine <- readLines(con, n = 1, warn = FALSE)) > 0) {
# code to be written
}
В разделе "код для написания" мне нужно иметь возможность ссылаться на отдельные элементы в каждой строке и сохранять их в массив. Файл не имеет заголовков, если это важно.
Спасибо!
2 ответа
Вы могли бы сделать что-то вроде этого:
CHUNK_SIZE <- 5000
con <- file('datafile.csv', 'rt')
res <- NULL
while (nrow(chunk <- read.csv(con, nrow = CHUNK_SIZE, header = FALSE, stringsAsFactors = FALSE)) > 0) {
res <- rbind(res, chunk)
if (nrow(chunk) < CHUNK_SIZE) break
}
Вы могли бы использовать read.table
с аргументом text
разобрать oneLine
Строка, как если бы это был CSV-файл:
# set your arguments: separator, decimal separator etc...
x <- read.table(text=oneLine, sep=",", dec=".", header=F)
Возвращенный x
это data.frame
только с одной строкой, которую вы можете легко превратить в массив.