У меня есть очень большой (10 миллионов строк x 12 столбцов) текстовый файл с разделителями-запятыми. Первый столбец содержит UNIX раз (в секундах до 2 dp)
Я хотел бы извлечь все строки, соответствующие определенной дате (например, 2014-06-26), и сохранить строки для каждой даты в другие файлы меньшего размера.
В приведенном ниже документе я сканирую файл, читая первое число в каждой строке (время), и выкладываю номер строки всякий раз, когда дата, связанная с текущей строкой, отличается от предыдущей row:
## create fake data ; there are many duplicate times, rows are not always in order
con <- "BigFile.txt"; rile.remove(con)
Times <- seq ( 1581259391, 1581259391 + (7*24*3600), by=100)
write.table(data.frame(Time=Times, x=runif(n = length(Times))), file=con, sep=",", row.names=F, col.names=F, append=F)
## read in fake data line-by-line, note
con <- file( "BigFile.txt", open="r")
Row <- 0
Now <- 0
Last <- 0
while (length(myLine <- scan(con,what="numeric",nlines=1,sep=',',skip=1,quiet=TRUE)) > 0 )
{Row <- Row+1
Now <- as.Date(as.POSIXct( as.numeric(myLine[1]), origin="1970-01-01", tz="GMT" ) , format="%Y-%m-%d")
if (Now!=Last) {print(data.frame(Row,Now))}
Last <- Now
}
Идея будет заключаться в том, чтобы сохранить эти индексы и использовать их для разбиения файла на более мелкие ежедневные порции ... Однако я уверен, что должны быть гораздо более эффективные подходы (я попытался открыть эти файлы с помощью пакета data.table, но все еще сталкивается с проблемами с памятью).
Любые указатели будут с благодарностью.