合并两个文件时如何识别故障情况?

时间:2015-12-02 15:02:15

标签: r merge

我使用以下命令在R中合并了两个数据帧。

tmp <- merge(df_a, df_b, by.x = c('colA'), by.y = c('colB'))

令我惊讶的是,超过50%的行未能合并,这是不可预期的。我想根据给定的条件确定未能合并的案例(来自df_adf_b)。在R中是否有任何可能的方法,或者我们只能进行命令行操作?

修改 这可以使用this问题中的一个解决方案来实现,并且可以使用 join 函数获取许多其他信息!

2 个答案:

答案 0 :(得分:2)

dplyr 包具有为此任务设计的anti_join功能:

library(dplyr)

# two sample DFs, each one with an unmatched row
df_a <- data_frame(row=1:3, colA=c('a', 'b', 'c'))
df_b <- data_frame(row=1:3, colA=c('a', 'b', 'd'))

anti_join(df_a, df_b)
#     row  colA
#   (int) (chr)
# 1     3     c

anti_join(df_b, df_a)
#     row  colA
#   (int) (chr)
# 1     3     d

答案 1 :(得分:1)

您可以使用all=TRUE

df_a <- data.frame(colA=2*(1:10),datA=1:10)
df_b <- data.frame(colB=3*(1:10),datB=1:10)

tmp <- merge(df_a, df_b, by.x = c('colA'), by.y = c('colB'))
#   colA datA datB
# 1    6    3    2
# 2   12    6    4
# 3   18    9    6

tmp1 <- merge(df_a, df_b, by.x = c('colA'), by.y = c('colB'),all=TRUE)
#    colA datA datB
# 1     2    1   NA
# 2     3   NA    1
# 3     4    2   NA
# 4     6    3    2
# 5     8    4   NA
# 6     9   NA    3
# 7    10    5   NA
# 8    12    6    4
# 9    14    7   NA
# 10   15   NA    5
# 11   16    8   NA
# 12   18    9    6
# 13   20   10   NA
# 14   21   NA    7
# 15   24   NA    8
# 16   27   NA    9
# 17   30   NA   10

或者您可以直接使用%in%检查:

df_a[!df_a$colA %in% df_b$colB,]
#    colA datA
# 1     2    1
# 2     4    2
# 4     8    4
# 5    10    5
# 7    14    7
# 8    16    8
# 10   20   10

df_b[!df_b$colB %in% df_a$colA,]
#    colB datB
# 1     3    1
# 3     9    3
# 5    15    5
# 7    21    7
# 8    24    8
# 9    27    9
# 10   30   10