让我们举个例子:
test=c(1,5,NA,5,4,1,NA,3,3,5,4,2)
plot(test,type="l")
这将绘制测试,但不会连接点。有没有办法我们可以忽略NA并连接点,这样我们得到漂亮的图形?
答案 0 :(得分:9)
一个选项是:
plot(na.omit(test), type = "l")
如果你想保持x轴从1 - length(test)
,那么:
plot(na.omit(cbind(x = seq_along(test), y = test)), type = "l")
答案 1 :(得分: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")
答案 2 :(得分:5)
另一种在相同位置保留缺失值的方法
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))
答案 3 :(得分:0)
您必须使用na.omit()
来忽略上述解决方案中的NA,或者尝试用合理的值替换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,因为内插/输入只是对实际值的估计,还需要选择正确的方法。