2016-10-31 1 views
1
entsprechen

Von einem gegebenen Datenrahmen (myData, in dem folgenden Beispiel) möchte ich die Variablen mit Werten abstimmen, die mindestens einem Paar von Werten in einer Liste (myList, in der Beispiel unten).Subset-Variablen, die Paaren von Werten in R

myList <- list(c(8,15), c(2,3)) 

v1 <- c(1, 2, 3, 8, 15) 
v2 <- c(3, 7, 8, 9, 10) 
v3 <- c(2, 4, 5, 6, 7) 
v4 <- c(8, 15, 6, 7, 9) 

myData <- cbind(v1, v2, v3, v4) 

Idealerweise sollte die Teilmenge besteht nur aus v1 und v4 weil in v1 das Paar 8,15 und das Paar auftritt 2,3 und v4 in tritt das Paar 8,15.

I die which Anweisung für ein einzelnes Paar zu verwenden versucht (d, 8, 15), wie folgt:

subset <- myData[which(myData==unlist(myList[[1]][1]) & myData==unlist(myList[[1]][2]))] 

Dennoch der Ausgang eine leere ganze Zahl ist. Fehle ich etwas in der which Aussage? Und wie könnte ich den Code für mehr als ein Wertepaar implementieren?

Vielen Dank für Ihre Hilfe!

GION

+1

Suchen Sie nach dem sequentiellen Auftreten jeder Zahl in dem Paar (8 dann 15; 2 dann 3) oder nur irgendein Auftreten von beiden Zahlen jedes Paares? – seasmith

+0

Jedes Auftreten. –

Antwort

2

ich eine Lösung für dieses Problem gefunden:

myData[, unique(which(sapply(myList, function(y) apply(myData, 2, function(x)all(y %in% x))),arr.ind = T)[, 1])] 
    v1 v4 
[1,] 1 8 
[2,] 2 15 
[3,] 3 6 
[4,] 8 7 
[5,] 15 9 

Es ist ein bisschen eine hässliche Funktion daher die Erklärungen: Die Funktion überprüft gelten, ob alle Elemente aus einer Liste Artikel von myList konnte in einer Spalte von myData gefunden werden. Die Sapply-Funktion gewährleistet eine Suche nach allen Elementen aus der Liste. Die welche Aussagen prüft was er gefunden hat und gibt die Zeile und die Spalte an. Wir sind nur an den eindeutigen Zeilen interessiert, die gefunden werden, die die Spalten ausgeben. Ein wenig kompliziert, aber sieh es hoffentlich hilft es :)

+0

Ich fand ein ähnliches Ergebnis mit einer Änderung von [dieser SO Post] (http://stackoverflow.com/questions/13062402/find-the-index-of-the-column-in-data-frame-that-contains-) the-Zeichenfolge als Wert). 'cols <- apply (myData, 2, Funktion (x) Summe (grepl (myList [[1]] [1], x))) & apply (MeineDaten, 2, Funktion (x) Summe (grepl (myList [[ 1]] [2], x))); myData [, Spalten] '. Dies würde das gleiche Ergebnis für das erste Element in "myList" zurückgeben. – seasmith

Verwandte Themen