所以,我怎麼可以添加兩個數據幀,其中行添加相同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