Быстрое преобразование нескольких столбцов фрейма данных в разные классы - PullRequest
0 голосов
/ 07 декабря 2018

Мне нужно импортировать большое количество значений из нескольких файлов .csv.С этим у меня нет проблем.Однако столбцы фрейма данных, которые возвращает моя функция при импорте указанных переменных, необходимо преобразовать в разные классы.

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

ссылка на фрейм данных (4'740'357 наблюдений из 6 переменных)

structure(list(start_date = c("2017-07-22 00:00", "2017-07-22 00:00", 
          "2017-07-22 00:00", "2017-07-22 00:00", "2017-07-22 00:00"), 
          start_station_code = c(6360L, 6248L, 6183L, 6248L, 6143L), 
          end_date = c("2017-07-22 00:13", "2017-07-22 00:10", "2017-07-22 00:13", 
          "2017-07-22 00:08", "2017-07-22 00:25"), 
          end_station_code = c(7046L, 6233L, 6234L, 6199L, 6270L), 
          duration_sec = c(807L, 642L, 774L, 529L, 1505L), 
          is_member = c(1L, 0L, 1L, 0L, 1L)), 
          row.names = 584979:584983, class = "data.frame")

Столбцы $start_date и $end_date необходимо преобразовать в класс Date (или POSIXct, в зависимости от того, что наиболее удобно), а $is_member необходимо преобразовать в класс фактора.

Пока мне удается преобразовать указанные столбцы с помощью следующего кода:

# data is the data frame. 

data[ , c(1,3)] <- lapply(data[ , c(1,3)], as.Date)
data$is_member <- as.factor(data$is_member)

Однако выполнение моей функции может занять до трех минут.Мне было интересно, если кто-нибудь имел представление о том, как я мог бы ускорить этот процесс.Примите во внимание, что мой фрейм данных, скорее всего, будет иметь до 5 миллионов строк .

1 Ответ

0 голосов
/ 08 декабря 2018

При импорте данных с помощью read.csv определите классы столбцов с помощью аргумента colClasses.

В моем случае решение было следующим:

classCol <- c("Date", "factor", "Date", "factor" ,"numeric" , "factor")

# Data is the data frame

data <- rbind(data, read.csv(fileImport, stringsAsFactors = FALSE, 
        header = TRUE, colClasses = classCol ))

Кредиты длярешение перейти к @Jaap и @ йод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...