2016-07-18 14 views
2

suchen kann sagen, dass ich einen Ausschnitt aus einer Liste, die wie folgt aussieht:Ein nicht indexorientiert für eindeutige Werte zwischen zwei Listen in R

aaa[[1]] 
# [1] "A5-5,73" "B3-4,73" "E3-8,73" "A1-8,73" "C1-7,73" "A1-2,73" "C3-2,73" "C1-1,73" 

Lets sagen, dass ich mit einem Abschnitt habe eine andere Liste, die sieht wie folgt aus:

bbb[[1]] 
# [1] "B3-4,73" "C3-2,73" "A5-5,73" "A1-8,73" "A1-2,73" "A1-5,73" "B1-1,73" "C1-4,73" 

Man bedenke, dass ich jetzt

which(aaa[[1]]!= bbb[[1]]) 

laufen die

012.351 zurück
# [1] 1 2 3 5 6 7 8 

Dies ist technisch wahr, weil der Index [4] das gleiche in beiden aaa und bbb

Was ich zurück haben möchte ist:

# [1] "C1-7,73" "A1-2,73" "C1-1,73" 

, weil diese die Werte von aaa, die nicht in bbb unabhängig von der Position sind. Ich würde auch zu einer Lösung offen, die nur eine Indexnummer zur Verfügung stellen würden, wie zum Beispiel:

# [1] 5 6 8 

Hier ist ein reproduzierbares Beispiel:

aaa <- vector("list") 
aaa[[1]] <- c("A5-5,73", "B3-4,73", "E3-8,73", "A1-8,73", 
      "C1-7,73", "A1-2,73", "C3-2,73", "C1-1,73") 
bbb <- vector("list") 
bbb[[1]] <- c("B3-4,73", "C3-2,73", "A5-5,73", "A1-8,73", 
      "A1-2,73", "A1-5,73", "B1-1,73", "C1-4,73") 
+5

Ich denke, Sie wollen 'setdiff()', wie in 'setdiff (aaa [[1]], bbb [[1]])' –

+3

Und was Sie zurückgegeben möchten, stimmt nicht mit den Daten. 'E3-8,73' statt' A1-2,73', ja? – Aaron

+0

Beide obigen Kommentare sind korrekt. Ich war nicht bewusst von 'setdiff' –

Antwort

3

Wenn Sie jedes Element der vergleichen wollen Liste aaa mit dem entsprechenden Element bbb einfach tun.

mapply(FUN = setdiff, x = aaa, y = bbb) 

Während dieses Schreiben habe ich setdiff wurde bereits von @RichardScriven in den Kommentaren erwähnt.

+0

Es ist alles deins. Ich habe genug Punkte;) –

+0

Schöne Vermutung, dass das OP dies elementweise auf den Listen machen wollte (vorausgesetzt, dass das eigentlich richtig ist ...), fragte ich mich, warum das nicht vereinfacht wurde. – Aaron

+0

@Richard Scriven Nun, danke, aber das ist nicht fair, Sie kamen zuerst mit der Lösung. –

2

Als @ Richard Scriven erwähnt in seinem Kommentar

setdiff(aaa[[1]], bbb[[1]]) 

die Art und Weise ist es, die Elemente zu erhalten. Wie Sie auch für eine Indexnummer gefragt, könnten Sie die()

which(aaa[[1]] %in% setdiff(aaa[[1]], bbb[[1]])) 

Während% in% logischen Werten erzeugt, die() sagt, wo sie wahr sind.

+1

Keine Notwendigkeit für die setdiff in der zweiten, es ist nur 'which (! A% in% b)' – Aaron