合并列并保留那些不常见的列

时间:2015-01-21 10:29:32

标签: r

我想根据列C合并四个表。但是,如果在一个表中找到一行而在其余表中找不到行,那么它应该在0列中收到V8。硒所需的输出。我尝试了普通的merge,然后它合并了所有表中的行,这不是我想要的。我想要包含也只在表子集中找到的行。

> Ago1 <- Combined_59[,c("C","V8")]
> head(Ago1)
                                       C     V8
1   hsa-miR-21-5p_TAGCTTATCAGACTGATGTTGA 295649
2   hsa-let-7f-5p_TGAGGTAGTAGATTGTATAGTT 180249
3   hsa-let-7a-5p_TGAGGTAGTAGGTTGTATAGTT 165935
4  hsa-miR-21-5p_TAGCTTATCAGACTGATGTTGAC 141379
5 hsa-miR-21-5p_TAGCTTATCAGACTGATGTTGACT  81026
6  hsa-miR-99b-5p_CACCCGTAGAACCGACCTTGCG  66289
> 
> Ago2 <- Combined_60[,c("C","V8")]
> head(Ago2)
                                      C     V8
1 hsa-miR-21-5p_TAGCTTATCAGACTGATGTTGAC 304165
2 hsa-miR-99b-5p_CACCCGTAGAACCGACCTTGCG  95169
3  hsa-miR-92a-3p_TATTGCACTTGTCCCGGCCTG  73501
4  hsa-miR-21-5p_TAGCTTATCAGACTGATGTTGA 225277
5   hsa-miR-21-5p_TAGCTTATCAGACTGATGTTG  43357
    > 
> Ago3 <- Combined_61[,c("C","V8")]
> head(Ago3)
                                       C     V8
1  hsa-miR-21-5p_TAGCTTATCAGACTGATGTTGAC 311106
2 hsa-miR-21-5p_TAGCTTATCAGACTGATGTTGACT  38969
3  hsa-miR-30e-3p_CTTTCAGTCGGATGTTTACAGC  34218
4   hsa-miR-21-5p_TAGCTTATCAGACTGATGTTGA  29467
5  hsa-miR-99b-5p_CACCCGTAGAACCGACCTTGCG  25616
6  hsa-miR-532-5p_CATGCCTTGAGTGTAGGACCGT  24568
> 
> Ago4 <- Combined_62[,c("C","V8")]
> head(Ago4)
                                       C   V8
1  hsa-miR-21-5p_TAGCTTATCAGACTGATGTTGAC 6922
2   hsa-miR-21-5p_TAGCTTATCAGACTGATGTTGA 5456
3 hsa-miR-21-5p_TAGCTTATCAGACTGATGTTGACT 2325
4  hsa-miR-99b-5p_CACCCGTAGAACCGACCTTGCG 1019
5 hsa-miR-378a-3p_ACTGGACTTGGAGTCAGAAGGC  516
6  hsa-miR-30e-3p_CTTTCAGTCGGATGTTTACAGC  513

输出:

                                   C    V8_Ago1   V8_Ago2   V8_Ago3   V8_Ago4
  hsa-miR-21-5p_TAGCTTATCAGACTGATGTTGAC 6922     304165    311106    6922
  hsa-miR-30e-3p_CTTTCAGTCGGATGTTTACAGC 0        0         34218     513
  ....
  ...

1 个答案:

答案 0 :(得分:2)

最好将所有数据集读入列表,但是如果您已创建单个数据集对象(“Ago”)。使用mget获取列表中的对象,然后更改第二列名称(实际上不需要。由于列名重复,将会出现警告消息。为避免这种情况,您可以创建“lst2”更改了列名称。)

lst <- mget(paste0('Ago', 1:4))
lst2 <- lapply(seq_along(lst), function(i) {
            x1 <- lst[[i]]
           names(x1)[2] <- paste(names(x1)[2], names(lst)[i], sep="_")
          x1})
res <- Reduce(function(...) merge(..., by='C', all=TRUE), lst2) 
res[is.na(res)] <- 0