Объединение и обобщение нескольких CSV-файлов из одной папки в R

#r #csv

#r #csv-файл #csv

Вопрос:

Я пытаюсь объединить несколько файлов CSV из одной папки на компьютере (более 200 CSV-файлов) в один новый файл со всеми необходимыми данными, которые необходимо использовать R . Ниже приведен пример двух текущих CSV-файлов (пример данных можно найти здесь: https://drive.google.com/drive/folders/1RbQ_cMNX5ys53OMISataTy-ZZlfk1SC8?usp=sharing ):

введите описание изображения здесь

введите описание изображения здесь

Я пытаюсь создать новый CSV-файл, содержащий имя сайта, номер, количество записей, начальный год, конечный год и количество лет между начальным и конечным годом. Это будет выглядеть примерно так с новой строкой для каждого исходного CSV в папке:

введите описание изображения здесь

Комментарии:

1. Возможно, вы захотите воспользоваться этой yaml возможностью, чтобы fread : например data.table::fread(file.csv, yaml = TRUE)

Ответ №1:

Предполагая, что ваши CSV-файлы находятся в папке ./data , получите вектор имен файлов.

 library(tidyverse)

filenames <- list.files("./data", "*.csv", full.names = TRUE)
  

Создайте функцию, которая считывает данные. Прочитайте в первой строке, чтобы получить name . Затем прочитайте остальные данные, пропуская первые две строки.

 process_csv <- function(filename) {
  name <- read_csv(filename, n_max = 1, col_names = FALSE)[[2]]
  
  number <- read_csv(filename, n_max = 1, col_names = FALSE, skip = 1)[[2]]
  
  read_csv(filename, skip = 2) %>%
    mutate(year = lubridate::year(lubridate::dmy_hm(DATE))) %>%
    summarise(
      count = n(),
      start_year = min(year),
      end_year = max(year),
      year_count = end_year - start_year
    ) %>%
    mutate(
      name = name,
      number = number,
      .before = 1
    )
}
  

Примените функцию и сохраните результат.

 result <- map_dfr(filenames, process_csv)

write_csv(result, "result.csv")

result
#> # A tibble: 2 x 6
#>   name        number count start_year end_year year_count
#>   <chr>        <dbl> <int>      <dbl>    <dbl>      <dbl>
#> 1 NEW_PLACE_1    123   281       1972     2020         48
#> 2 NEW_PLACE_2    155   393       1961     2020         59
  

Комментарии:

1. большое вам спасибо. Есть ли способ добавить количество записей, например, из примера выше, количество строк, занятых датами в csv, т. Е. От строки 4 до максимальной записи?