R从两个数据帧之间的唯一行创建新数据帧的有效方法

时间:2016-11-21 21:25:56

标签: r dataframe compare

我需要创建一个新数据帧两个现有数据帧,其中新数据帧是第一个数据帧中不在第二个数据帧中的每一行。我找到了一些使用merge函数的代码here,这允许我这样做。基本上,如果生成的合并有结果,那么该行在数据框中,我不会将其添加到我的新行:

for (j in 1:nrow(my.df)) {
    if(nrow(merge(my.df[j,],sample.df))==0) {
        test.df <- rbind(test.df,my.df[j,])
    }
}

问题是for循环非常慢。考虑到我的约束,是否有更有效的方法来构建数据框?

my.df

A B class
1 2 x
2 3 y
3 4 z

sample.df

A B class
1 2 x

test.df应该看起来像

A B class
2 3 y
3 4 z

1 个答案:

答案 0 :(得分:2)

使用library(dplyr)我们可以使用anti_join()

anti_join(my.df, sample.df)
# Joining, by = c("A", "B", "class")
#   A B class
# 1 3 4     z
# 2 2 3     y

如@Gregor所述,您还可以将data.frames转换为data.tables library(data.table)以获得更快的速度