2013-03-20 18 views

Odpowiedz

7

nie ma sposobu, aby zignorować brakujących wartości. Musisz zastąpić je wartościami interpolowanymi.

# using base packages only 
plot(approx(test, xout=seq_along(test))$y, type="l") 
# or, using zoo 
library(zoo) 
plot(na.approx(test), type="l") 
+0

Jest! A ty nie potrzebujesz interpolacji ... :-) Dziękuję za wzięcie udziału w konkursie - zredagowałem swoją odpowiedź na konto dla przewidywanego przypadku użycia. –

9

Jeden opcje to:

plot(na.omit(test), type = "l") 

Jeśli chcesz zachować oś x począwszy od 1 - length(test) wówczas:

plot(na.omit(cbind(x = seq_along(test), y = test)), type = "l") 
+0

Ale to usuwa brakujących wartości, a tym samym tworzy oś x z tylko 10 wartości zamiast 12. Założono, że OP chce utrzymać oś X z 12 wartościami. –

+0

@JoshuaUlrich Zatem nie można polegać na R generującym dla ciebie zmienną x jako '1: length (x)'. Jednym z rozwiązań jest samodzielne utworzenie indeksu '1: length (x)' i powiązanie go z danymi, a następnie "na.omit()" tej macierzy. To powinno dawać taki sam wynik, jak twoja interpolacja, bez faktycznego interpolowania - nie ma takiej potrzeby, aby dać, że wszystko, co chcesz zrobić, to połączyć kropki; umieszczenie punktu, w którym są "NA", to oczywiście inna sprawa. –

+0

+1 Bardzo ładne ... –

5

Innym sposobem, który zachowuje brakującą wartość w tych samych miejscach

data=data.frame(x=1:12,y=test) 
plot(data) 
lines(data) 
lines(na.omit(data),col=2) 

albo w ggplot2

ggplot(data,aes(x,y))+geom_point()+geom_line(data=na.omit(data)) 
Powiązane problemy