/ / R Ефективен начин за създаване на нов кадър от уникални редове между два кадъра за данни - r, dataframe, compare

R Ефективен начин за създаване на нова рамка от данни от уникални редове между две рамки данни - r, dataframe, compare

Трябва да създам нов кадър с данни два съществуващи информационни кадъра, където новият кадър от данни е всеки ред от първия кадър с данни, който не е във втория кадър. Намерих някакъв код тук използвайки функцията за сливане, която ми позволи да го направя по този начин. По принцип, ако полученото сливане има резултат, тогава редът е в рамката с данни и аз не го добавям към новия си:

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 loop е много бавен. Има ли по-ефективен начин за изграждане на рамка с данни предвид ограниченията, които имам?

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

Отговори:

2 за отговор № 1

Използвайки 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) за да получите допълнителна бързина