1
Ich habe drei Datenrahmen df1
, df2
, df3
. Ich möchte den Wert (die Werte) in col1
von df2
, der in col1
von df1
und/oder col1
von df3
nicht vorhanden ist, identifizieren.Extrahiere die Teilmenge eines Datenrahmens basierend auf Werten, die von anderen zwei Datenrahmen eindeutig sind.
df1 <- data.frame(col1=c('A','C','E'),col2=c(4,8,2))
df1
df2 <- data.frame(col1=c('A','B','C','E','G','I'),col2=c(4,8,2,6,1,9))
df2
df3 <- data.frame(col1=LETTERS[3:26],col2=sample(3:26))
df3
# Expected output
#2 B 8
Was habe ich getan?
table(df2$col1 %in% df1$col1)
# FALSE TRUE
# 3 3
df2[df2$col1 %in% df1$col1,]
# col1 col2
#1 A 4
#3 C 2
#4 E 6
df2[!df2$col1 %in% df1$col1,]
# col1 col2
#2 B 8
#5 G 1
#6 I 9
table(df2$col1 %in% df3$col1)
#FALSE TRUE
# 2 4
df2[df2$col1 %in% df3$col1,]
# col1 col2
#3 C 2
#4 E 6
#5 G 1
#6 I 9
df2[!df2$col1 %in% df3$col1,]
# col1 col2
#1 A 4
#2 B 8
In einem falschen Ansatz,
df2[!df2$col1[!df2$col1 %in% df1$col1] %in% df3$col1,]
# col1 col2
#1 A 4
#4 E 6
Wie die Wiederholung der Indizes zu vermeiden?
Gibt es einen besseren Ansatz als die folgenden?
df2[!df2$col1 %in% df1$col1,][!df2$col1[!df2$col1 %in% df1$col1] %in% df3$col1,]
# col1 col2
#2 B 8
Während der richtige Ansatz,
df2[!(df2$col1 %in% df1$col1 | df2$col1 %in% df3$col1),]
# col1 col2
#2 B 8
Sie verwenden können, verwenden können 'anti_join' oder' setdiff' von 'dplyr' – akrun
meinst du' anti_join (anti_join (df2, df1, durch = 'col1'), df3, by = 'col1') '? – Prradep