Пакетная обработка нескольких файлов .csv с использованием R, выбирая только один столбец - PullRequest
0 голосов
/ 24 марта 2019

Я работаю над проектом, который включает 470 статистических данных, сохраняемых в течение 40 лет. Мои данные структурированы таким образом, что каждый год является папкой, и соответствующие статистические данные 470 (в виде файлов .csv) хранятся в этой папке. Каждый из этих файлов содержит восходящий или нисходящий столбец чисел (внутри того же файла .csv), о котором я забочусь. Мне нужно знать, какой это номер столбца для каждого файла .csv.

Вот моя проблема. Информационный файл, который мне дали, который объясняет мне каждую из этих характеристик, имеет неправильную маркировку. Он говорит мне, что значимые данные находятся в столбце 4 для каждого файла .csv (data_col = 4 для всех атрибутов); однако, это верно только для 80-90% файлов из моих наблюдений.

Я хочу пакетного импорта столбца 4 из каждого файла в один большой набор данных (470 столбцов; каждый представляет статистику), чтобы я мог видеть, восходящие или нисходящие данные в этом столбце. Если это не так, я могу вручную открыть этот файл и найти его сам. Затем я могу изменить свой информационный файл, чтобы знать, в каких столбцах будет выполняться мой анализ позже.

Альтернативой этому является открытие и закрытие 470 файлов для каждого года (или 40 раз) и поиск данных в столбце 4, как указано.

Как мне выполнить пакетный импорт одного столбца из нескольких CSV-файлов в один набор данных в R?

1 Ответ

0 голосов
/ 24 марта 2019

Это позволит получить все CSV-файлы в каталоге, а затем прочитать их в единый data.frame, сохраняя только столбец 4 (или любые другие столбцы, которые вы хотите сохранить), а также поместить имя файла в каждую строку, если вы хотитенайти ошибки во входных данных

library(tidyverse)  # get useful functions
files <- list.files(path = '/d$/temp/csv', 
                    pattern = ".*csv",
                    full.names = TRUE
)
all_data <- map_dfr(files, ~{
  read_csv(.x)[, 4] %>%  # keep column 4
    mutate(file = .x)  # add file name
})
print(all_data[1:10,])

col4   file
4 /d$/temp/csv/Document1 - Copy (2).csv
4 /d$/temp/csv/Document1 - Copy (2).csv
4 /d$/temp/csv/Document1 - Copy (2).csv
4 /d$/temp/csv/Document1 - Copy (2).csv
4 /d$/temp/csv/Document1 - Copy (2).csv
4 /d$/temp/csv/Document1 - Copy (2).csv
4 /d$/temp/csv/Document1 - Copy (2).csv
4 /d$/temp/csv/Document1 - Copy (2).csv
4 /d$/temp/csv/Document1 - Copy (2).csv
4 /d$/temp/csv/Document1 - Copy (2).csv

CSV-файлы выглядели так:

col1,col2,col3,col4,col5,col6
1,2,3,4,5,6
1,2,3,4,5,6
...