2017-05-29 4 views
1

Ich habe einen Datenrahmen in R mit dem ersten Faktor mit 3 Stufen [A, B, C] und der zweite Faktor mit 3 Stufen [1,2,3]. Dies ergibt den Datenrahmen.R - Wie extrahiert man eine Teilmenge eines Datenrahmens, der viele Beobachtungen von zwei Faktoren enthält, von denen jeder auf der Grundlage von Bedingungen mehrere Stufen hat?

Alphabet <- c ("A","A","A","B","B","B","C","C") 
L <- c (1,2,1,1,3,1,3,3) 
df = data.frame(Alphabet, L) 

Ich möchte den Rahmen auf der Grundlage der Kriterien der Teilmenge, wenn eine Ebene in Alphabet ein 3 hat, dann sollte der Reihe fallen gelassen werden. Dies sollte jedoch nur passieren, wenn eine andere Beobachtung auf derselben Ebene entweder eine 1 oder eine 2 enthält.

also im obigen Beispiel Zeile wird 5 gelöscht werden, da auch mit einer B 1 in den Zeilen 4 und 6 Zeilen 7 und 8 wird nicht gelöscht werden, da C mit entweder 1 oder 2 ist nicht

assoziiert ist
+0

Wenn ich das richtig verstehe oben in Ihrem Beispiel verwenden können, nur die Teilmenge der Zeilen 7 und 8 bestehen, wie die y Sind die einzigen Zeilen, in denen die Ebene des ersten Faktors mit nur einer Ebene vom zweiten Faktor verknüpft ist? – Constantinos

+0

** Aus Review Queue: ** Willkommen bei StackOverflow - bitte lesen Sie [Wie man ein großartiges reproduzierbares Beispiel macht?] (Https://stackoverflow.com/questions/5963269/how-to-make-a-great-r -reproducible-Beispiel/5963610 # 5963610) und bearbeiten Sie Ihre Frage danach. –

+0

Sie werden alle Zeilen außer 5 enthalten. Die Idee ist, dass alle Werte mit 1,2 verknüpft bleiben. Löschen Sie die Zeilen, die 3 enthalten, nur dann, wenn der Ebene im Alphabet eine 1 oder 2 zugeordnet ist. – ZMP

Antwort

1

Hier ist eine dplyr Lösung:

library(dplyr) 
group_by(df, Alphabet) %>% filter(!(L == 3 & any(L %in% c(1, 2)))) 
0

Oder wir data.table

library(data.table) 
setDT(df)[df[, .I[!(L==3 & any(L %in% 1:2))], Alphabet]$V1] 
Verwandte Themen