Как загрузить N строк данных и присвоить их переменной, используя цикл for в R

#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 строк