Объединение нескольких CSV-файлов с использованием столбца даты, когда даты отличаются

#r #csv

Вопрос:

У меня есть много csv-файлов в папке, которые расположены в четырех столбцах. Вот пример с DatA.csv.

Дата позитивность Полярность
12-июня-97 10 30
26-июня-97 20 31
07-Июля-97 22 27

Дата столбца содержит различные наблюдения в каждом из этих csv-файлов. Например, набор данных B имеет следующее:

(datB.csv)

Дата позитивность Полярность
14-июня-97 14 17

Я хочу объединить все столбцы полярности из csv-файлов в один, используя переменную «дата», сохраняя при этом имя файла. Например, выше было бы

Дата данные Полярность
12-июня-97 30
14-июня-97 18
26-июня-97 31
07-Июля-97 27

Я не уверен, следует ли мне использовать left_join ?

Ответ №1:

Если ваши даты (ключи) встречаются в нескольких csv-файлах, и вы хотите сохранить их все, а также объединить данные за одну и ту же дату в нескольких csv-файлах, вы можете использовать внешнее соединение (т. Е. merge(..., all = TRUE) . Подробнее о присоединениях здесь.

Если даты уникальны между csv-файлами, вам не нужно присоединяться; вы можете просто rbind , вот так:

 library(dplyr)

files <- list.files(pattern = ".csv")
files
#> [1] "DatA.csv" "DatB.csv"
output <- data.frame()

for(file in files){
  f <- read.csv(file)
  f[,file] <- f$polarity
  output <- dplyr::bind_rows(output, f)
}
output
#>   X      Date positivity polarity DatA.csv DatB.csv
#> 1 1 12-Jun-97         10       30       30       NA
#> 2 2 26-Jun-97         20       31       31       NA
#> 3 3 07-Jul-97         22       27       27       NA
#> 4 1 14-Jun-97         14       18       NA       18

Created on 2021-10-06 by the reprex package (v2.0.1)
 

Данные:

 DatA.csv <- data.frame(
  Date = c("12-Jun-97", "26-Jun-97", "07-Jul-97"),
  positivity = c(10, 20, 22),
  polarity = c(30, 31, 27))

DatB.csv <- data.frame(Date = "14-Jun-97", positivity = 14, polarity = 18)

write.csv(DatA.csv, "DatA.csv")
write.csv(DatB.csv, "DatB.csv")
 

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

1. Большое спасибо. Это так полезно. Это было именно то, что я искал. Возможно, я переосмыслил проблему.

2. Не за что! Удачи