我需要创建一个新数据帧两个现有数据帧,其中新数据帧是第一个数据帧中不在第二个数据帧中的每一行。我找到了一些使用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
答案 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)
以获得更快的速度