Как объединить несколько файлов .csv и добавить столбец с именем каждого набора данных в R? - PullRequest
1 голос
/ 07 мая 2019

Я пытаюсь объединить несколько файлов CSV в R, чтобы я мог выполнить некоторое прогнозное моделирование.Хотя каждый файл имеет одинаковые столбцы и одинаковый порядок этих столбцов одинаков, имена некоторых столбцов различны.Пока что мой код прекрасно сочетает файлы и удаляет заголовки.Однако теперь мне нужно добавить еще два столбца для даты, связанной с каждым CSV.Имя файла каждого CSV содержит дату.

Имена файлов форматируются следующим образом: «Январь 2017», «Февраль 2017», «Март 2017» и т. Д.

Итак, я хочудва столбца - месяц и год.

Ниже приведен код, который я использовал до сих пор.Он объединяет все CSV в один, но не создает двух дополнительных столбцов, которые мне нужны.

dat <- setwd('C:/Users/ . . . /Historical Data')

file_names <- dir(dat)
dataset <- do.call(rbind, lapply(file_names, read.csv, skip = 1, header = FALSE))
dataset <- do.call(rbind, lapply(file_names, read.csv, header = FALSE, function(x) cbind(read.csv(x), name=strsplit(x,'\\.')[[1]][1])))

head(dataset)

Кто-нибудь может указать мне правильное направление, как лучше кодировать эти два столбца в этом?

Ответы [ 2 ]

2 голосов
/ 07 мая 2019

Ваш код был довольно хорош для начала.

Следующий код читает каждый элемент в file_list и добавляет его в пустой список. Затем он связывает все элементы вместе. Это хорошо для пакетного чтения файлов и хранения их имен в отдельном столбце.

Попробуйте сделать это:

library(data.table)
file_list <- list()
file_list <- lapply(file_names, function(x){
                    ret <- read_csv(x)
                    ret$origin <- x
                    return(ret)})
df <- rbindlist(file_list)
1 голос
/ 07 мая 2019

Вот library(tidyverse) способ выполнить то, что вам нужно, вы все равно можете установить свой рабочий каталог там, где он должен быть, и вместо dir() вы можете использовать list.files()

dat_files <- list.files(".../Historical Data", pattern='*.csv')

map_df(dat_files, ~read_csv(.x) %>%
                 mutate(month_year = str_remove_all(.x, ".csv", "")) %>%
                 separate(month_year, into=c("Month", "Year"), sep=" ")
)
* 1006.* Этот код будет читать все ваши файлы в один файл и использовать имя файла для создания нового столбца без .csv, прикрепленного к нему.Затем он разделит этот столбец на столбец Месяц и Год, разделяющий на " "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...