从一个数据框中删除另一个数据框中不存在的行并合并它们

时间:2018-02-12 06:56:53

标签: r join merge

我有2个数据框如下:

DF1:

ID  A  B  C
1   4  7  5
2   3  8  9
3   6  2  7
4   1  8  6
5   3  9  1
6   7  8  3

DF2:

ID  D  E  F
1   6  8  9
2   2  1  1
3   6  1  9

我想删除df1中df2中不存在的行,然后合并2个数据集。

所需的输出将是:

DF3:

ID  A  B  C  D  E  F
1   4  7  5  6  8  9
2   3  8  9  2  1  1
3   6  2  7  6  1  9

我已经尝试了以下所有内容,但没有得到正确的结果:

df1 <- df1[(df1$ID %in% df2$ID),]
df1 <- df1[(df2$ID %in% df1$ID),]
df1 <- semi_join(df1,df2)
df1 <- semi_join(df1,df2, by="ID")

我还尝试了其他“加入”方法,例如“inner_join”和“left_join”。

1 个答案:

答案 0 :(得分:1)

这样的事情可行:

## Random datasets
set.seed(1)
df1 <- data.frame(x = 1, y = 2, ID = sample(letters[1:24], 20))
df2 <- data.frame(ID = sample(letters[1:24], 20), a = 1, b = 2)

## Rows in common
rows_in_common <- df1$ID[df1$ID %in% df2$ID]

## Columns to use in df2
df2_cols <- 2:3

## Combine both datasets
df3 <- cbind(df1[match(sort(rows_in_common), df1$ID),],
             df2[match(sort(rows_in_common), df2$ID), df2_cols])