按列(而不是按行)合并多个 CSV 文件

按列(而不是按行)合并多个 CSV 文件

我有大约 100 个 CSV 文件,我想将它们合并到一个 Excel 电子表格中(所有内容都在一个选项卡中,而不是在单独的选项卡中)。这些 CSV 文件的格式相同:每个文件包含 4,000 行和 2 列(带标题),大小约为 60 KB。

到目前为止,我发现的所有解决方案都将下一个 CSV 附加到活动选项卡最后一行的末尾。我还没有看到可以将新 CSV 附加到最后一列右侧的列的解决方案。

这里有一些例子。

  1. DOS复制方法:copy *.csv merge.txt

  2. 此解决方案. (VBA 脚本。)

  3. 使用 Excel 的数据>新查询>来自文件>来自文件夹(Excel 2013)。

互联网上还有使用 Windows Powershell 脚本合并 CSV 文件的示例。

以上所有内容都会创建一个包含约 400,000 行数据的 Excel 电子表格,这对我来说毫无用处。

我很感激能得到解决此问题的建议。谢谢!

编辑。找到了一个简单的解决方案:使用 r 的 cbind() 将数据合并到数据框中,然后将其写入 csv。整个过程大约需要 3 秒。适合这项工作的工具!

感谢大家的贡献。干杯,

--tcollar

答案1

不确定“原生” Windows 10,但如果您安装了适用于 Linux 的 Windows 子系统,则可以使用 UNIXpaste命令,该命令应该按照您要求的方式按列连接文件。

答案2

使用第三个选项:“使用 Excel 的数据 > 新查询 > 来自文件 > 来自文件夹 (Excel 2013)”

单击该transform data选项,将打开 Power Query 编辑器。它将显示文件列表。

单击列标题中的按钮content可创建一个函数,该函数可以在附加每个单独的 CSV 文件之前对其进行转换。

选择正确的表格或工作表并在transform sample file函数中执行以下操作。

  1. 使用“使用标题作为第一行”将列名插入第一行
  2. 转置表

然后在调用该函数的查询中附加转置的 CSV 文件。只需将transpose表恢复为原始形状并提升即可the first row to headers

答案3

以下是按列合并 csv 文件的 r 代码:

setwd("C:/mycsvdir")
filenames <- list.files(full.name=TRUE)

## read csv, skipping the first two rows of every file
Everything <- lapply(filenames, function(i){read.csv(i, header=TRUE, skip=2)}
combined.df <- do.call(cbind.data.frame, Everything)

write.csv(combined.df, file = "combined.csv", row.names=FALSE)

如果您想按行合并 csv 文件,只需替换cbindrbind

编辑:关于合并的顺序:我的 csv 文件命名为mycsv 001.csvmycsv 002.csv等。它们按照该顺序被读取和合并,这对我的目的来说非常有用。

相关内容