【问题标题】:Merge data frames based on rownames in R基于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

【问题讨论】:

    标签: r merge dataframe


    【解决方案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 中的列。”
    猜你喜欢
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2013-01-01
    • 2017-05-24
    • 2017-02-24
    • 1970-01-01
    相关资源
    最近更新 更多