在R中是否实现了任何插值方法,您可以避免使用负值插值缺失值?
我们来看一个向量:
d <- c(NA, NA, 5000, 17782, NA, NA, 21450, 42320, NA, NA, 52900, 54170,
60600, 69000, 78000, 87000, 96900, 96900, 122000, 132700, 145000,
171500, 198900, 213400, 229600, 250200, 272000, 291600, 318000,
343000, 367000, 419200, 445000, 495000, 540000)
plot(d)
使用三次样条插值
library(zoo) # for na.spline
d.interpolation <- na.spline(d)
这给出了
[1] -100174.12 -31198.04 5000.00 17782.00 16961.75 14160.17 21450.00 42320.00 53674.83
[10] 54841.83 52900.00 54170.00 60600.00 69000.00 78000.00 87000.00 96900.00 96900.00
[19] 122000.00 132700.00 145000.00 171500.00 198900.00 213400.00 229600.00 250200.00 272000.00
[28] 291600.00 318000.00 343000.00 367000.00 419200.00 445000.00 495000.00 540000.00
然而,在这种情况下,负值并没有多大意义。
显然,像是
d.interpolation <- na.spline(c(0,d))
也行不通。
你有解决方法吗?
答案 0 :(得分:4)
您可以在log(d)
上进行插值:
library(zoo)
d.interpolation <- exp(na.spline(log(d)))
d.interpolation
# [1] 1.86 282.86 5000.00 17782.00 22424.08 19122.70 21450.00
# [8] 42320.00 59826.52 58724.79 52900.00 54170.00 60600.00 69000.00
# [15] 78000.00 87000.00 96900.00 96900.00 122000.00 132700.00 145000.00
# [22] 171500.00 198900.00 213400.00 229600.00 250200.00 272000.00 291600.00
# [29] 318000.00 343000.00 367000.00 419200.00 445000.00 495000.00 540000.00