所以,我怎么可以添加两个数据帧,其中行添加相同row.names:添加两个data.frames,使用rownames索引
x = data.frame(x = 1:10, y = 10:1); y = x
rownames(y) = as.numeric(rownames(x)) + 5
x + y #WRONG, rows should be offset by '5', producing a data.frame that has 15 rows.
也许可以做到这一点使用ddply,通过添加索引列,这样的(这也显示我想要的结果):
x$id = as.numeric(rownames(x))
y$id = as.numeric(rownames(y))
plyr::ddply(rbind(x,y),'id',function(x){
colSums(x[,c('x','y')])
})[,-1]
目标结果:
x y
1 1 10
2 2 9
3 3 8
4 4 7
5 5 6
6 7 15
7 9 13
8 11 11
9 13 9
10 15 7
11 6 5
12 7 4
13 8 3
14 9 2
15 10 1
在上文中,行6 :10是由索引列相交的两个数据帧的交集的总和。
这似乎更像'join'而不是'add'。我强烈建议不要依靠行名进行多少计算;有些软件包(例如'dplyr')忽略/删除它们,就像它一样,或者离开它。好像你在使用行名称作为索引,那么为什么不显式添加一列,比如'$ id'?在这种情况下,您可以使用许多连接技术之一,例如'x $ id < - 1:10; y $ id < - 6:15; dplyr :: bind_rows(x,dplyr :: anti_join(y,x,by =“id”))'。 – r2evans
这样使用像merge这样的合并(x,y,by = 0,all = TRUE)可以更容易处理。 –
人们猜到了你想要的东西,但它绝对不会增加。请考虑扩大,使您的问题更清晰。投票结束。 – marbel