我想根据列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
....
...
答案 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