读取并cbind目录中多个文件的第二列

时间:2015-10-12 03:51:05

标签: r dataframe cbind

我在一个目录中有94个制表符分隔文件,没有标题' / path /'在第一列中有基因名称,在第二列中有计数。有23000行。

我想阅读/ path / in中找到的所有94个文件,并合并所有94个文件以创建单个数据框&count; count.table'其中第一列包含基因名称(在所有94个文件的第1列中相同且顺序相同),第二列包含每个单独文件的计数(即94个文件中每个文件的第2列,即独特的数字)。最终的count.table数据框将有23000行和95列 理想情况下是这样的:

 Column1 Column2 Column3 Column4... to column 95 
 gene a      0      4      3 
 gene b      4      9      9 
 gene c      3      0      8 
 ...
 to row 23000

Column2包含样品X的计数,样品Y的Column3计数,样品Z的第4列等。

我是否必须单独阅读R中的每个文件,然后通过将每个文件的第二列添加到cbind来合并它们以创建' counts.table'?提前谢谢。

1 个答案:

答案 0 :(得分:4)

评论太长了。

这样的事情应该有效。

# not tested
files <- list.files(path="./path")
genes <- read.table(files[1], header=FALSE, sep="\t")[,1]     # gene names
df    <- do.call(cbind,lapply(files,function(fn)read.table(fn,header=FALSE, sep="\t")[,2]))
df    <- cbind(genes,df)

list.files(...)将指定路径中所有文件的名称抓取到矢量中。然后我们提取基因名称:第一个文件的第1列(可以是任何文件)。然后,我们使用lapply(files, function(fn)...)构建一个data.frames列表,其中包含每个文件的第二列,并使用do.call(cbind, ...)以列为单位将所有这些列绑定在一起。最后,我们将基因名称绑定到结果。

假设:

  1. 基因名称在所有文件中的顺序相同。
  2. 所有文件的行数完全相同。
  3. 路径目录仅包含您的基因文件。