让我们举个例子:
test=c(1,5,NA,5,4,1,NA,3,3,5,4,2)
plot(test,type="l")
这将绘制测试,但不会连接点。有没有办法我们可以忽略 NA 并连接点,以便我们得到漂亮的图表?
一种选择是:
plot(na.omit(test), type = "l")
如果要保留从 1 开始的 x 轴,length(test)
则:
plot(na.omit(cbind(x = seq_along(test), y = test)), type = "l")
没有办法忽略缺失值。您需要用插值替换它们。
# 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")
在相同位置保留缺失值的另一种方法
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))
您必须使用上述解决方案忽略 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 - 因为插值/插补只是对实际值的估计,并且还需要选择正确的方法。