将具有不同行号的计数表组合成矩阵 - 文件名是列名

Combining count tables with different row numbers to matrix - file names are column names

我经常需要在 R 中导入多个文本文件并将它们组合成一个矩阵以供进一步分析。通常我处理来自微生物学研究的计数数据,第一列是项目,第二列是计数。样本中的行数通常不相同。

我想将这些单个文件组合成一个矩阵,其中行名是第 1 列的项目,列显示第 2 列的计数。最终 table 的列名应该是文件原始单个文件的名称。

这是一个最小的例子: 文件 1:Sample1.csv

    [1] [2]
[1]  A , 3
[2]  B , 5
[3]  C , 7
[4]  D , 2
[5]. E , 1

文件 2:Sample2.csv

    [1] [2]
[1]  B , 1
[2]  C , 3
[3]  F , 4
[4]  G , 7

最终想要的输出

  [Sample1] [Sample2]
[A]  3       NA
[B]  5       1
[C]  7       3
[D]  2       NA
[E]  1       NA
[F]  NA      4
[G]  NA      7

我知道在这种情况下,您必须开始将文件作为列表加载到 R 中

all_paths <-list.files(path = "/path/to/directory/with/.csv", pattern = "*.csv",full.names = TRUE)

all_content <-
  all_paths %>%
  lapply(read.table,
         header = FALSE, row.names =1,
         sep = ",",
         encoding = "UTF-8")

这给了我一个数据框列表,其中的项目作为行名和第一列中的计数

我现在很难将此列表与上面显示的模式结合起来。我尝试了 rbind.fill (dpylr) 和不同帖子中的其他功能,但从未成功。

非常感谢任何帮助!

不要将项目作为行名,将它们作为第一列阅读。将数据放入列表中并使用 Reduce.

进行全连接
all_paths <-list.files(path = "/path/to/directory/with/.csv", pattern = "*.csv",full.names = TRUE)
all_content <-lapply(all_paths, read.table,sep = ",", encoding = "UTF-8")
result <- Reduce(function(x, y) merge(x, y, by = 'V1', all = TRUE), all_content)