Слияние многих фреймов данных из файлов csv
Я хотел бы объединить кучу фреймов данных вместе (потому что кажется, что многие операции проще, если вы имеете дело только с одним, но исправьте меня, если я ошибаюсь).
В настоящее время у меня есть один фрейм данных:
ID, var1, var2
A, 2, 2
B, 4, 5
.
.
Z, 3, 2
Каждый идентификатор находится в одной строке с несколькими отдельными измерениями
У меня также есть файл csv с повторным измерением для каждого ID, например:
filename = ID_B.csv
time, var4, var5
0, 1, 2
1, 4, 5
2, 1, 6
...
Я бы хотел:
ID, time, va1, var2, var4, var5
...
B, 0, 4, 5, 1, 2,
B, 1, 4, 5, 4, 5,
B, 2, 4, 5, 1, 6,
...
Мне действительно не нравится порядок столбцов. Единственное решение, о котором я могу думать, это добавить столбец идентификатора в каждый файл csv, а затем прокрутить их, вызвав merge()
несколько раз. Есть ли более элегантный подход?
Ответы
Ответ 1
Я понимаю, что вам нужно извлечь идентификатор из имени файла, а затем объединить импортированный csv с существующим фреймворком данных.
df1 <- read.csv(textConnection("ID, var1, var2
A, 2, 2
B, 4, 5"))
# assuming the imported csv-files are in working directory
filenames <- list.files(getwd(), pattern = "ID_[A-Z].csv")
# extract ID from filename
ids <- gsub("ID_([A-Z]).csv", "\\1", filenames)
# import csv-files and append ID
library(plyr)
import <- mdply(filenames, read.csv)
import$ID <- ids[import$Var1]
import$Var1 <- NULL
# merge imported csv-files and the existing dataframe
merge(df1, import)
Результат:
ID var1 var2 time var4 var5
1 B 4 5 0 1 2
2 B 4 5 1 4 5
3 B 4 5 2 1 6