#r #dataframe
#r #фрейм данных
Вопрос:
У меня есть огромный набор данных под названием df (около 16 ГБ данных). Мы хотели открыть его на 100 строк одновременно, и каждый раз, когда он считывает 100 строк, мы присваиваем его переменной. Это означает, что первая переменная должна содержать строки от 1 до 100, вторая переменная должна содержать 101-200.
Код для загрузки первых 100 строк данных в 10 переменных должен быть таким:
reportlen <- seq(10,100,10)
for (i in length(reportlen)){
file <- fread(paste0("C:/Users/Documents/data.csv,", "nrows =",reportlen[i]))
assign(paste0("f", i),file)
}
Однако я столкнулся с ошибкой, и она выдала мне нулевое значение.
Ответ №1:
Если бы вы действительно хотели придерживаться вашего текущего подхода, то вам, вероятно, пришлось бы использовать skip
функцию fread
, чтобы компенсировать текущее чтение на любой объем, который вы уже прочитали.
Но, учитывая, что вы все равно планируете перенести весь файл в память, я рекомендую просто прочитать весь файл за один раз:
df <- read.csv(file="C:/Users/Documents/data.csv")
parts <- str(split(df, (as.numeric(rownames(df))-1) %/% 100))
Переменная parts
должна представлять собой список, содержащий несколько фреймов данных, каждый из которых имеет длину 100 строк (за исключением, возможно, последнего фрейма данных, который может иметь другое количество).
Комментарии:
1. Мой набор данных содержит 73337 переменных и более 16000 строк. Чтение read.csv за один раз приведет к зависанию моего компьютера.
2. На самом деле проблема не в этом. Проблема в том, можете ли вы допустить одновременное хранение всего набора данных в памяти, в R,. Если вы можете , то мое решение, вероятно, является правильным. Выполнение этого по-своему не ускорит чтение всего файла, скорее наоборот, это, вероятно, замедлит его.
3. Итак, я попытался использовать read.csv для 10 строк данных. Но, похоже, чтение read.csv занимает намного больше времени по сравнению с использованием fread для 10 строк данных. Итак, я предполагаю, что использование read.csv для всех моих данных займет намного больше времени.
4. Это не особенно хороший тест. Сравнение с 1000 строками было бы более значимым.
5. Разница уже очень очевидна в 10-й строке. Поэтому я считаю, что разница во времени будет просто больше при загрузке 1000 строк