Объединить много фреймов данных из CSV-файлов, когда подразумевается столбец ID? - PullRequest
19 голосов
/ 13 октября 2009

Я хотел бы объединить несколько фреймов данных (потому что многие операции проще, если вы работаете только с одним, но исправьте меня, если я ошибаюсь).

В настоящее время у меня есть один кадр данных, подобный этому:

ID, var1, var2
A,  2,    2
B,  4,    5
.
.
Z,  3,    2

Каждый идентификатор находится в одной строке с несколькими измерениями

У меня также есть CSV-файл с повторным измерением для каждого идентификатора, например:

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,
...

Меня не волнует порядок столбцов. Единственное решение, которое я могу придумать, - это добавить столбец ID в каждый CSV-файл, а затем выполнить цикл по ним, вызывая merge() несколько раз. Есть ли более элегантный подход?

1 Ответ

15 голосов
/ 13 октября 2009

Насколько я понимаю, вам нужно извлечь идентификатор из имени файла, а затем объединить импортированный 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
...