2016-07-08 7 views
0

I mit einer Spalte zwei Datenrahmen haben: originIdEntfernen passende Variablen aus einem Datenrahmen ohne merge()

Mein Ziel ist es aus data alle Zeilen zu entfernen, wo originId zu originId in filter

gleich ist, ist es eine einstufige Methode zur Durchführung dieser Aufgabe in R ohne merge() und dann Teilmenge zu verwenden? Wenn ja, was wäre das?

> dim(filter) 
[1] 3790 1 
> dim(data) 
[1] 100110  1 

> head(filter) 
     originId 
454 359720489 
1519 359720489 
2584 359720489 
3649 359720489 
4714 359720489 
7456 -5378234 


> head(data) 
    originId 
1 -5378234 
2 -5357893 
3 -5357892 
4 -5355561 
5 -5355558 
6 -5355320 

Antwort

0
data[!duplicated(data[data$originId,])] 
+0

@the_darkside Sie eindeutige Werte in ORIGINID –

+0

bekommen kann ja aber die Werte sind nicht alle einzigartig und ich möchte alle Werte halten, auch wenn sie doppelt vorhanden sind, in 'data $ originId' wenn sie nicht' filter $ originId' entsprechen –

+0

@the_darkside du kannst den jimbo code benutzen, wenn du die gleichen Daten willst [! data $ originId% in% filter $ originId,] –

0

können Sie versuchen:

a <- c(1, 2, 1, 3, 4, 1) 
b <- c(1, 5, 6) 
a[ !a %in% b ] 
[1] 2 3 4 

a zu Ihrem data entspricht, und b ist der filter Vektor. Daher muss der 1 in a gefiltert werden. Sie können alle Nummern in b in a mit %in% finden. Ausgabe ist ein logischer Vektor, der von ! umgedreht wird. Ausgabe ist eine Teilmenge von a ohne die Zahlen in b.

In Ihrem Fall sollten Sie Folgendes eingeben:

data[ !data$originId %in% filter$originId, ] 
+0

Dies hat aus irgendeinem Grund einen leeren Datensatz erzeugt ... ist es wichtig, dass "originId" ein Faktor ist? –

+0

Nein sollte es nicht sein. Mit Ihren Daten oben funktioniert alles gut für mich. Bitte posten Sie Ihren Code für das Subsetting. – Jimbou

Verwandte Themen