R中多个csv文件的完全连接

full join of multiple csv files in R

我知道类似的问题已经被问过多次,但不知何故我被困在离解决方案很近的地方。做一些研究并没有让我更接近。作为 R 的初学者,我可能会问错 questions/searching 错误的关键字。既然如此,欢迎您的帮助。

我有一个包含多个带“;”的 .csv 文件的文件夹作为分隔符。这些文件有两列构成 id。所有表格都有不同的大小,例如行数和列数不同。

例如,数据如下所示:

name extension data1 data2 data n
paul ch 7 9 n1
sue nc 0 8 n2
sue ch 6 8 n3
etc.

数据具有以下逻辑:data1 包括来自 1 个样本(样本名称:data1)的所有数据,并包括名称出现的次数,nc 或 ch。

我现在的目标是将所有这些表整合到一个组合数据框中。

首先,我尝试使用 for 函数进行迭代,但结果很差。后来我遇到了一个 tidyverse 方法如下:

files <- dir(path = "~/Documents/data", pattern = "*.csv")

data <- files %>%
  map(read_csv2(paste("~/Documents/data", files, sep = "/"))) %>%
  reduce(full_join)
data

这开始工作,但失败并出现错误:

0sError: Files must all have 31 columns:                                             0s
* File 2 has 34 columns

这是我卡住的地方。我认为当数据帧被编译成列表时会出现问题。在我看来,数据帧必须具有相同的扩展名。在我在堆栈和其他地方找到的示例中,示例数据的长度始终相同。

谁能帮我找出错误?

祝福

map 语法为 map(list, function)read_csv2(paste("~/Documents/data", files, sep = "/") 不是一个函数,它试图对所有文件进行 运行 read_csv2,但是 read_csv2 没有被 vecrorized。更改为 purrr 样式的 lambda 语法,如下所示。我还强烈建议在您的连接中指定 by 列,尤其是完整连接,以确保您得到您认为的结果并且结果不会在大小上爆炸。

files %>% 
  map(~read_csv2(paste("~Documents/data", ., sep = "/")) %>%
  reduce(full_join, by = c("name", "extension"))

如果你需要调试更多,给自己一个小例子,一次一行。比如说,从 files2 <- files[1:2] 开始,只读前两个文件。如果可行,请继续加入。