基于R中的行名合并数据框

Posted

技术标签:

【中文标题】基于R中的行名合并数据框【英文标题】:Merge data frames based on rownames in R 【发布时间】:2011-12-06 01:50:56 【问题描述】:

如何合并两个数据框的列,包含一组不同的列,但 一些 行具有相同的名称?两个数据框中都没有出现的行的字段应该用零填充:

> d
    a   b   c   d   e   f   g   h   i  j
1 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10
2 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9  1
> e
   k  l  m  n  o  p  q  r  s  t
1 11 12 13 14 15 16 17 18 19 20
3 21 22 23 24 25 26 27 28 29 30
> de
    a   b   c   d   e   f   g   h   i  j  k  l  m  n  o  p  q  r  s  t
1 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10 11 12 13 14 15 16 17 18 19 20
2 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9  1  0  0  0  0  0  0  0  0  0  0
3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0  0 21 22 23 24 25 26 27 28 29 30

【问题讨论】:

【参考方案1】:

?merge:

名称“row.names”或数字 0 指定行名称。

例子:

R> de <- merge(d, e, by=0, all=TRUE)  # merge by row names (by=0 or by="row.names")
R> de[is.na(de)] <- 0                 # replace NA values
R> de
  Row.names   a   b   c   d   e   f   g   h   i  j  k  l  m  n  o  p  q  r  s
1         1 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10 11 12 13 14 15 16 17 18 19
2         2 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9  1  0  0  0  0  0  0  0  0  0
3         3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0  0 21 22 23 24 25 26 27 28 29
   t
1 20
2  0
3 30

【讨论】:

这样就行了,谢谢。有没有更高效的方法?将两列与 20 万行合并需要几分钟,甚至将空数据框与具有 20 万行的单列数据框合并需要几分钟... 有没有办法保留行名?而不是让他们在一个专门的专栏中移动?当然之后可以做rownames(de)=de$Row.names,只是想知道是否有办法不首先破坏它...... 什么不会破坏它? @John 喜欢rownames(de)=de$Row.names; de=de[2:length(de)] merge 无法做到这一点。请参阅帮助文件:“列是公共列,然后是 x 中的其余列,然后是 y 中的列。”

以上是关于基于R中的行名合并数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中合并同一数据框中的行(基于特定列下的重复值)?

在将其组合到R中的一个数据帧时,在不同的数据帧中保留重复的行名[重复]

基于多个值合并熊猫数据框中的行

如何在不添加“Row.names”列的情况下按行名合并数据框?

将值与 R 中的行名匹配

R:合并同一data.frame中的行[重复]