R语言 合并具有重复行名称的数据框

gab6jxml  于 2023-11-14  发布在  其他
关注(0)|答案(2)|浏览(203)

我有两个 Dataframe 'data1'和'data2'。

data1 <- data.frame(gene=c("ABCD11","ABCD2","ABCD2"),value1=c(2,5,9))

> data1
    gene value1
1 ABCD11      2
2  ABCD2      5
3  ABCD2      9

data2 <- data.frame(gene=c("ABCD11","ABCD2","ABCD2"),value2=c(32,35,39))

> data2
    gene value2
1 ABCD11     32
2  ABCD2     35
3  ABCD2     39

字符串
我想将它们合并到一个 Dataframe 'data_merge'中,输出如下所示:

data_merge <- data.frame(gene=c("ABCD11","ABCD2","ABCD2"),value1=c(2,5,9),value2=c(32,35,39))

> data_merge
    gene value1 value2
1 ABCD11      2     32
2  ABCD2      5     35
3  ABCD2      9     39


我试过merge()left_join()full_join() .所有这些都提供输出:

gene value1 value2
1 ABCD11      2     32
2  ABCD2      5     35
3  ABCD2      5     39
4  ABCD2      9     35
5  ABCD2      9     39

mftmpeh8

mftmpeh81#

我认为我们可以bind_cols,在names中添加set difference作为子元素。这是一个脆弱的操作,因为它依赖于在data.frames中对相同排序的gene列进行填充。

library(dplyr)

data1 |> 
    bind_cols(select(data2, all_of(setdiff(names(data2), names(data1)))))

    gene value1 value2
1 ABCD11      2     32
2  ABCD2      5     35
3  ABCD2      9     39

字符串

au9on6nz

au9on6nz2#

column_to_rownames(full_join(rownames_to_column(data1), rownames_to_column(data2)))

    gene value1 value2
1 ABCD11      2     32
2  ABCD2      5     35
3  ABCD2      9     39

字符串

相关问题