R - rbind两个数据帧并删除额外的ID

时间:2017-04-27 04:37:07

标签: r

我有两个DF

> 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。

2 个答案:

答案 0 :(得分: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'))

答案 1 :(得分: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

P.S。使用新列名称,为by

指定join参数变得很重要