首页 > 解决方案 > 如何在共享相同文件名的不同目录中合并(内部连接)数据框

问题描述

我有多个包含多个 csv 文件的目录。

dir1/file1.csv 
dir1/file2.csv

dir2/file1.csv 
dir2/file2.csv

dir2 包含 dir1 拥有的每个文件,等等。每个文件夹中有数千个文件。

dir1 中的所有文件与 dir2 中的所有文件具有相同的结构。在两个目录之间,文件共享 1 列,标题为“框架”。

因此,我的目标是对 dir1 中的所有文件执行 inner_join,这些文件在 dir2 中共享相同的确切文件名(基于共享的“框架”列)并将其输出到新目录中。

每个文件的文件将如下所示:

dir1 中的示例数据:

individual <- c("1","1","2","2","3","4","5","5")
x <- c(665,NA,NA,NA,NA,NA,663,665)
y <- c(-474.5,NA,NA,NA,NA,NA,-474.5,-472.5)
frame <- rep(1:8)
file1 <- data.frame(individual,x,y,frame)

dir2 中的示例数据:

datetime <- c("2016-01-01", "2016-01-02","2016-01-03","2016-01-04","2016-01-05","2016-01-06", "2016-01-07","2016-01-08","2016-01-09","2016-01-10")
frame <- rep(1:10)
file1 <- data.frame(datetime,frame)

数据之间的连接示例,

file1 <- inner_join(file1,file1,by = "frame").

重要的是,我想保留原始 csv 文件的相同名称。我有点坚持如何让它大规模工作(即在所有文件上执行,但只有当它们的名称匹配时)

我尝试使用@rentrop 编写的此链接中的修改后答案

从 R 的子目录中读取具有相同名称的 csv 文件

directories <- c("path1/to/file1.csv", "path2/to/file1.csv")
files <- lapply(directories, list.files, pattern="*.csv", full.names = TRUE)
files <- lapply(files, sort)
dat <- Map(function(x,y) { inner_join(read.csv(x), read.csv(y), by = "frame") },
    files[[1]], files[[2]])

这没有用,得到了

  zero-length inputs cannot be mixed with those of non-zero length

非常感谢有关如何完成此任务的任何建议。谢谢!

标签: rlistmergeinner-join

解决方案


推荐阅读