合并多个具有不同列名的数据框架中的单个列

时间:2019-01-17 19:23:24

标签: r dataframe merge sapply

我正在尝试合并多个表中的单个列,其中该列在每个表中都有不同的名称。

我有多个表(.txt文件),这些表具有多个列,并且设置如下:

文件1:

Target     total_coverage avg_coverage sample1_total_cvg  sample1_mean_cvg...                   
Contig1493   19515          34.18        19515             34   
Contig1494   594            18           594               18
Contig1495   50372          40.23        50372             40
Contig1496   1985           21.81        1985              22
.
.
.

文件2:

Target     total_coverage avg_coverage sample1_total_cvg sample1_mean_cvg...                    
Contig1493   22345          33.1          22345            36   
Contig1494   466            25            4556             12
Contig1495   50000          30.2          47987            33
Contig1496   4530           26.4          45786            23
.
.
.

以此类推。

在所有表中,前三列的名称相同,其余各列的名称不同(对应于不同的单个样本)

我试图创建一个保留ID和第一列的表,然后将每个表合并到第5列(sampleID_mean_cvg),以便最终表看起来像这样:

Target       sample1_mean_cvg       sample2_mean_cvg      sample3_mean_cvg ...              
Contig1493     34                      12                   22
Contig1494     18                      13                   22
Contig1495     40                      12                   13
Contig1496     22                      55                   21
.
.
.

我已经搜索了很多,并认为我可以使用sapply来找到它。 因此,这就是我一直在尝试的方法。我将所有表都放在一个目录中并且正在做:

smpl.Tables <- list.files(pattern = ".txt")

然后我创建一个空列表,将其用作接收传入文件的容器

list.data<-list()

创建循环以读取数据

for (i in 1:length(smpl.Tables))
{
  list.data[[i]]<-read.table(smpl.Tables[i])
}

将数据名称添加到列表中

names(list.data)<-smpl.Tables

写入新文件

write.csv(sapply(list.data,"[", 5),'contigDepth.csv')

这是我执行代码时得到的:

   sample1_FileName   sample2_Filename   sample3_Filename...
   sample1_mean_cvg   sample2_mean_cvg   sample3_mean_cvg...
1   34                12                 22
2   18                13                 21
3   40                12                 13
4   22                55                 21
.
.
.

我无法终生解决在合并每个表的第5列时如何保留第一个列ID的问题。我想我可以进入最终文件并复制粘贴内容,然后删除文件名的第一行...但是必须有一种方法可以做到这一点。有人有什么建议吗?我将非常乐意提供任何帮助!

欢呼

0 个答案:

没有答案