#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 до максимальной записи?