10

让我们举个例子:

       test=c(1,5,NA,5,4,1,NA,3,3,5,4,2)

      plot(test,type="l")

这将绘制测试,但不会连接点。有没有办法我们可以忽略 NA 并连接点,以便我们得到漂亮的图表?

4

4 回答 4

10

一种选择是:

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

如果要保留从 1 开始的 x 轴,length(test)则:

plot(na.omit(cbind(x = seq_along(test), y = test)), type = "l")
于 2013-03-20T19:46:24.177 回答
9

没有办法忽略缺失值。您需要用插值替换它们。

# 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")
于 2013-03-20T19:53:37.937 回答
6

在相同位置保留缺失值的另一种方法

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

或者在 ggplot2

ggplot(data,aes(x,y))+geom_point()+geom_line(data=na.omit(data))
于 2013-03-20T20:25:33.470 回答
0

您必须使用上述解决方案忽略 NA,na.omit()或者尝试用合理的值替换 NA - 您可以为此使用包 imputeTS。

你可以例如插值:

library(imputeTS)
imp <- na_interpolation(test)
plot(imp, type="l")

您可以将平均值作为替换:

library(imputeTS)
imp <- na_mean(test)
plot(imp, type="l")

您也可以将移动平均线作为替代:

library(imputeTS)
imp <- na_ma(test)
plot(imp, type="l")

最后,使用最适合您的用例的东西是有意义的。通常这将“忽略”NA - 因为插值/插补只是对实际值的估计,并且还需要选择正确的方法。

于 2019-05-11T02:23:07.173 回答