/ / R Un modo efficiente per creare nuovi frame di dati da righe univoche tra due frame di dati: r, dataframe, compare

R Modo efficiente per creare nuovi frame di dati da righe univoche tra due frame di dati: r, dataframe, compare

Ho bisogno di creare un nuovo frame di dati due frame di dati esistenti in cui il nuovo frame di dati è ogni riga dal primo frame di dati che non è nel secondo frame di dati. Ho trovato del codice Qui usando la funzione di fusione che mi ha permesso di farlo in questo modo. Fondamentalmente, se l'unione risultante ha un risultato, la riga si trova nel frame dati e non la aggiungo alla mia nuova:

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

Il problema è che il ciclo for è molto lento. Esiste un modo più efficiente per costruire un data frame dati i vincoli che ho?

my.df

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

sample.df

A B class
1 2 x

test.df dovrebbe assomigliare

A B class
2 3 y
3 4 z

risposte:

2 per risposta № 1

utilizzando library(dplyr) possiamo usare 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

Come menzionato da @Gregor, puoi anche convertire i tuoi data.frames in data.tables con library(data.table) per avere un po 'di velocità in più