2017-04-27 47 views
0

我已經2級的DF的R - rbind兩個數據幀,並刪除多餘的ID

> df1 
id type 
1 a 
2 b 
3 f 
4 t 
5 y 

> df2 
id type 
1 D 
2 V 
3 f 
4 t 
5 y 
6 z 
7 p 
8 x 

我希望得到以下輸出

id type 
1 a 
2 b 
3 f 
4 t 
5 y 
1 D 
2 V 
3 f 
4 t 
5 y 

基本上,我想加盟(rbind)的DF並刪除兩個DF中不存在的ID。

這裏
+1

一次的答案已經給出了,因爲你可能會使這些問題的答案你不應該改變你的數據就變得很重要。 –

+0

我知道,但我只改變DF中的列名。我只是認爲有一些誤解 –

+1

不,我沒有改變你的數據,這個事實在編輯歷史中是完全可見的,我猜你認爲它並不是公開可見的。 – Frank

回答

1

一種策略是取這兩個數據幀之間的ID的內積,然後rbind()剩餘ba列組合在一起:

df <- merge(df1, df2, by="id") 
rbind(df[,c("id", "b")], setNames(df, c("id", "z", "b"))[, c("id", "b")]) 

輸出:

id b 
1 1 a 
2 2 b 
3 3 f 
4 4 t 
5 5 y 
6 1 D 
7 2 V 
8 3 f 
9 4 t 
10 5 y 

使用的數據:

df1 <- data.frame(id=c(1:5), b=c('a', 'b', 'f', 't', 'y')) 
df2 <- data.frame(id=c(1:8), a=c('D', 'V', 'f', 't', 'y', 'z', 'p', 'x')) 
+0

@Frank你改變問題的原始數據。我現在正在改變它。 –

+0

@TimBiegeleisen你爲什麼改變問題中的列名? –

+0

@TomHart我認爲你最初在弗蘭克編輯之前有不同的列名。無論如何,這並不會使我的答案無效。選擇未定義列 –

0

考慮您的輸入作爲df1df2,你可以嘗試:

library(dplyr) 
library(tidyr) 

df1 %>% 
    inner_join(df2, by = "id") %>% 
    gather(key = eh, value = meh, -id) %>% 
    select(id, meh) 

這給:

id meh 
1 1 a 
2 2 b 
3 3 f 
4 4 t 
5 5 y 
6 1 D 
7 2 V 
8 3 f 
9 4 t 
10 5 y 

附:新列名,它指定by參數爲join

+0

是真的。相信現在已經修復了。謝謝! – Aramis7d