web-dev-qa-db-ja.com

R-NA値が欠落している線をプロットする

私は次のdata.frame、 "subset"を持っています

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つの連続する値だけだからです。プロットは、NAを介してこれらの値を結ぶ線を引く代わりに、「A」の値の間のNAを無視します。そのために、次のコードを使用します。

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」はすべて同じプロットにあります。

2
panajach

これを試して:

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)

もう1つの可能性は、plotsubset=引数を使用することです。この場合、上記のplot行を次のように置き換えます。

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

どちらの場合でも、次のグラフィックが表示されます。

screenshot

0
G. Grothendieck