2013-06-23 5 views
5

Używając R, chcę sprawnie zidentyfikować, które wartości w sekwencji nie występują. Napisałem poniższy przykład, jak to zrobić. Musi być lepszy sposób. Czy ktoś może pomóc?Identyfikacja brakujących wartości w sekwencji/wykonanie asymetrycznej różnicy między dwiema listami

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

Proponuję, aby zmodyfikować tytuł pytanie od brakujących wartości w R miał inną signification ... – agstudy

+0

@agstudy Mógłbyś coś zasugerować? –

+0

Na przykład, Jak wykonać asymetryczną różnicę między 2 listami? :) – agstudy

Odpowiedz

10

Innym możliwym rozwiązaniem

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

Wygląda na to, że 'setdiff()' nie rozpoznaje różnicy, jeśli dwie sekwencje są czynnikami, jeśli podstawowe zbiory czynników są takie same. Metoda '% w%' identyfikuje jednak różnice w rzeczywistych sekwencjach. –

1

Innym rozwiązaniem pomocą match (podobny do %in%)

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

Stosując grep():

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

Możesz być "leniwy" i używać collapse = ^|$, ale użyj powyższej, aby uzyskać dokładną dokładność.

Korzystanie grepl():

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

Powiązane problemy