Загрузка больших CSV-файлов в dataframe при сохранении структуры столбцов - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь загрузить папку больших файлов (всего 35 миллионов строк) в R и использовать ее в качестве фрейма данных.

Мне удалось загрузить данные, хотя это и занимает 10/15 минут, используя приведенный ниже код, однако проблема в том, что все столбцы из CSV становятся 1 столбцом. Вот мой код:

# Load files

temp = list.files(path ="D:/", pattern="*.csv", full.names = TRUE)
myfiles = lapply(temp, read.delim)

# Make Dataframe

df_list = lapply(seq(length(myfiles)),function(i){
  df = as.data.frame(myfiles[i], stringsAsFactors = FALSE)
})

head(do.call(bind_rows,df_list))

df = as.data.frame(data.table::rbindlist(df_list, use.names=TRUE, fill=TRUE))

Столбец CSV может выглядеть так:

|A|B|C|D1|E|

Однако вывод в моем фрейме данных выглядит так:

|A.B.C.D1..E|

Будет полезна любая помощь в решении этой проблемы с колонками.

1 Ответ

0 голосов
/ 06 июля 2018

Вы можете использовать fread() для более быстрого чтения csv и rbindlist() для объединения данных в списках. Оба из пакета data.table.

library(data.table)


# Load files
temp = list.files(path ="D:/", pattern="*.csv", full.names = TRUE)

Используйте fread() вместо read.delim():

myfiles = lapply(temp, fread)

Поскольку воспроизводимые данные не предоставлены:

df_list <- lapply(1:5, function(x) {
  set.seed(x)

  rows <- sample(1:32, 2)
  mtcars[rows, ]
})

Объединить данные в списках:

df <- rbindlist(df_list)

Это результат:

     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
 1: 22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
 2: 16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
 3: 18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
 4: 15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
 5: 18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
 6: 27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
 7: 30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
 8: 21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
 9: 14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
10: 15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
...