当隐含 ID 列时,合并来自 csv 文件的许多数据框?

Posted

技术标签:

【中文标题】当隐含 ID 列时,合并来自 csv 文件的许多数据框?【英文标题】:Merge many data frames from csv files, when ID column is implied? 【发布时间】:2010-12-06 10:27:20 【问题描述】:

我想将一堆数据框合并在一起(因为如果您只处理一个数据框,似乎很多操作会更容易,但如果我错了,请纠正我)。

目前我有一个这样的数据框:

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

每个 ID 都在一行中,有几个单独的测量值

我还有一个对每个 ID 进行重复测量的 csv 文件,例如:

文件名 = 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】:

我的理解是你需要从文件名中提取ID,然后将导入的csv与现有的dataframe合并。

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

【讨论】:

哦!我完全错过了每个 csv 是单个 ID 的测量值。嗬!你的回答很好。 你只需要ldply而不需要mdply,你也可以通过names(filenames) &lt;- ids来简化事情。你也可以在list.files 中使用. 而不是getwd()。否则很好的答案。

以上是关于当隐含 ID 列时,合并来自 csv 文件的许多数据框?的主要内容,如果未能解决你的问题,请参考以下文章

合并列时如何保留所有唯一的值组合?

如何在 BASH 中合并来自两个 CSV 文件的数据?

将来自不同文件夹的多个 csv 文件(相似名称)合并到一个 csv 中并逐行绑定它们 [关闭]

尝试将 csv 文件加载到雪花数据库时出现“在预期解析列时到达记录结尾”错误

根据第一列中的数据合并两个 CSV 文件

当我使用 pandas 读取 .csv 中的特定列时,奇怪的跳转