基于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中的一个数据帧时,在不同的数据帧中保留重复的行名[重复]