2013-06-23 9 views
5

Mit R möchte ich effizient identifizieren, welche Werte in einer Sequenz fehlen. Ich habe das folgende Beispiel geschrieben, wie ich es mache. Es muss einen besseren Weg geben. Kann jemand helfen?Identifizieren von fehlenden Werten in einer Sequenz/Durchführen einer asymmetrischen Differenz zwischen zwei Listen

data.list=c(1,2,4,5,7,8,9) 

full.list=seq(from = 1, to = 10, by =1) 

output <- c() 
for(i in 1:length(full.list)){ 
    holder1 <- as.numeric(any(data.list == i)) 
    output[i] <- holder1 
} 

which(output == 0) 
+1

Ich schlage vor, dass Sie den Titel der Frage zu ändern, da Werte in R fehlt eine andere Bedeutung hatte ... – agstudy

+0

@agstudy Könnten Sie etwas vorschlagen? –

+0

Zum Beispiel, wie asymmetrischen Unterschied zwischen 2 Listen durchzuführen? :) – agstudy

Antwort

10

Eine andere mögliche Lösung

setdiff(full.list,data.list) 
2
full.list[!full.list %in% data.list] 
+0

Es scheint wie 'setdiff()' wird keinen Unterschied identifizieren, wenn die beiden Sequenzen Faktoren sind, wenn die zugrunde liegenden Faktorgruppen die gleichen sind. Die% in% -Methode identifiziert jedoch Unterschiede in den tatsächlichen Sequenzen. –

1

Eine weitere Option match (ähnlich %in%)

full.list[!match(full.list,data.list,nomatch=FALSE)] 
[1] 3 6 10 
0

grep() using:

grep(paste("^", data.list, "$", sep = "", collapse = "|"), full.list, invert = TRUE)

Sie könnten "faul" sein und collapse = ^|$ verwenden, aber das obengenannte für genaue Genauigkeit verwenden.

Mit grepl():

full.list[!grepl(paste("^", data.list, "$", sep = "", collapse = "|"), full.list)]

Verwandte Themen