Evil under Sun 2022-05-23 11:18 采纳率: 66.7%
浏览 76
已结题

R语言内数据框合并的问题

比方说,我现在有两个数据框

a <- as.data.frame(matrix(0, nrow=5, ncol=3))
a <- a+1
colnames(a) <- c('A1', 'A2', 'A3')
rownames(a) <- paste0('ar_', seq(1:5))
a
     A1 A2 A3
ar_1  1  1  1
ar_2  1  1  1
ar_3  1  1  1
ar_4  1  1  1
ar_5  1  1  1

b <- as.data.frame(matrix(0, nrow=5, ncol=4))
b <- b+5
colnames(b) <- c('B1', 'B2', 'B3', 'B4')
rownames(b) <- c('ar_3', 'ar_5', 'br_1', 'br_2', 'br_3')
b
     B1 B2 B3 B4
ar_3  5  5  5  5
ar_5  5  5  5  5
br_1  5  5  5  5
br_2  5  5  5  5
br_3  5  5  5  5

大致情况是,他俩在行名中有重复,我想把两个按照行来合并,有重叠的部分直接拼接,独自的行则以0或者NA表示;对于列来说,不考虑重复情况(即假设无重复,全部直接合并),想要得到的结果如下:

c #merged dataframe
     A1 A2 A3 B1 B2 B3 B4
ar_1  1  1  1  0  0  0  0
ar_2  1  1  1  0  0  0  0
ar_3  1  1  1  5  5  5  5
ar_4  1  1  1  0  0  0  0
ar_5  1  1  1  5  5  5  5
br_1  0  0  0  5  5  5  5
br_2  0  0  0  5  5  5  5
br_3  0  0  0  5  5  5  5

有没有什么函数可以直接实现这个功能呢,对R相关的函数不是很清楚,不太想自己再去造轮子。
感谢!

  • 写回答

1条回答 默认 最新

  • 艾秋 2022-05-23 18:32
    关注
    > c <- merge(x = a, y = b, by = "row.names", all = TRUE)
    > rownames(c) <- c$Row.names
    > c$Row.names = NULL
    > c
    

    img

    这应该是比较接近的答案

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月1日
  • 已采纳回答 5月24日
  • 赞助了问题酬金5元 5月23日
  • 创建了问题 5月23日

悬赏问题

  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000