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日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效