2017-03-04 127 views
0

我有以下data.frame,「子集」的R - 繪製的線缺少NA值

Time   A B C 
2016-10-07 06:16:46 NA NA 41 
2016-10-07 06:26:27 40 39 42 
2016-10-07 06:38:23 NA 40 NA 
2016-10-07 06:41:06 42 42 44 
2016-10-07 06:41:06 NA 42 44 
2016-10-07 06:41:06 NA 42 44 
2016-10-07 06:41:07 44 43 48 
2016-10-07 06:41:41 NA 43 48 
2016-10-07 06:42:44 45 42 48 
2016-10-07 06:48:40 46 45 48 

我想有一個圖,其中「時間」是x軸,「A」是一條線,「B」和「C」是點。

但是,當我繪製此圖時,出現在「A」中的唯一一條線是連接最後2個點(45和46)的線,因爲這些是「A」中唯一連續的2個值。該圖忽略了「A」值之間的NAs,而不是通過NAs連接這些值的線。要做到這一點,我使用下面的代碼:

plot(subset$Time,subset$A,type="l",ylim=c(min(subset$B,na.rm=TRUE)-5,max(subset$C,na.rm=TRUE)+5),xlim=c(as.POSIXct(min(subset$Time)),as.POSIXct(max(subset$Time)))) 
lines(subset$Time,subset$B,type="p",col=27) 
lines(subset$Time,subset$C,type="p",col=134) 

我試圖解決方案,如na.omit()或na.approx(),但這些似乎只工作,如果我想繪製「A」分別在一個獨立的情節,他們似乎並不與「時間」,「B」和「C」在同一個情節中一起工作。

非常感謝您提前。

回答

0

您可以用指數來代替na.omit()工作:這樣的事情應該這樣做:

plot(subset$Time[!is.na(subset$A)],subset$A[!is.na(subset$A)],type="l") 
# with your xlim and ylim, of course 

lines(subset$Time,subset$B,type="p",col=27) 
lines(subset$Time,subset$C,type="p",col=134) 
+0

非常感謝你,它的工作:) – panajach

0

試試這個:

xlim <- range(subset$Time) 
ylim <- range(subset[-1], na.rm = TRUE) 
plot(A ~ Time, na.omit(subset[1:2]), type = "l", xlim = xlim, ylim = ylim) 
points(B ~ Time, subset, col = 27) 
points(C ~ Time, subset, col = 134) 

另一種可能是使用的plotsubset=參數在這種情況下,我們將上面的plot行替換爲:

ok <- ! is.na(subset$A) 
plot(A ~ Time, subset, subset = ok, type = "l", xlim = xlim, ylim = ylim) 

在這兩種情況下,我們得到這個圖形:

screenshot

+0

非常感謝你的幫助,它的工作:) – panajach