R中NA值的线性插值
我有一个表R中NA值的线性插值,r,dplyr,data.table,interpolation,R,Dplyr,Data.table,Interpolation,我有一个表test,我想根据确实存在的值之间的线性插值来近似其NA值 例如,绘制的第二行如下所示: v1 <- unlist(test[2,]) plot(v1[!is.na(v1)], names(v1)[!is.na(v1)], type="l", add = TRUE) 以下是示例数据: dput(test) structure(list(variable = c(-20, -10, 0, 24, 40, 55), `26500` = c(NA, NA, 0L, NA, NA,
test
,我想根据确实存在的值之间的线性插值来近似其NA值
例如,绘制的第二行如下所示:
v1 <- unlist(test[2,])
plot(v1[!is.na(v1)], names(v1)[!is.na(v1)], type="l", add = TRUE)
以下是示例数据:
dput(test)
structure(list(variable = c(-20, -10, 0, 24, 40, 55), `26500` = c(NA,
NA, 0L, NA, NA, NA), `30000` = c(0L, 0L, NA, NA, NA, NA), `30100` = c(NA,
NA, NA, NA, 0L, 0L), `30700` = c(NA, NA, NA, 0L, NA, NA), `31600` = c(10L,
NA, NA, NA, NA, NA), `33700` = c(20L, 10L, NA, NA, NA, NA), `33800` = c(NA,
NA, 10L, NA, NA, NA), `33900` = c(NA, NA, NA, NA, 10L, 10L),
`34000` = c(NA, NA, NA, 10L, NA, NA), `34600` = c(30L, 20L,
NA, NA, NA, NA), `34800` = c(NA, NA, 20L, NA, NA, NA), `35100` = c(NA,
NA, NA, NA, 20L, 20L), `35200` = c(NA, NA, NA, 20L, NA, NA
), `35300` = c(NA, 30L, NA, NA, NA, NA), `35400` = c(40L,
NA, NA, NA, NA, NA), `35600` = c(NA, NA, 30L, NA, NA, NA),
`35800` = c(NA, NA, NA, 30L, 30L, NA), `35900` = c(NA, 40L,
NA, NA, NA, 30L), `36200` = c(50L, NA, 40L, NA, NA, NA),
`36300` = c(NA, NA, NA, 40L, 40L, NA), `36400` = c(NA, NA,
NA, NA, NA, 40L), `36700` = c(NA, 50L, NA, NA, NA, NA), `36900` = c(NA,
NA, 50L, NA, NA, NA), `37000` = c(NA, NA, NA, 50L, 50L, 50L
), `37200` = c(60L, NA, NA, NA, NA, NA), `37800` = c(NA,
60L, NA, NA, NA, NA), `37900` = c(NA, NA, 60L, NA, NA, NA
), `38000` = c(NA, NA, NA, 60L, NA, NA), `38200` = c(70L,
NA, NA, NA, 60L, 60L), `38800` = c(NA, 70L, 70L, NA, NA,
NA), `39000` = c(NA, NA, NA, 70L, NA, 70L), `39100` = c(NA,
NA, NA, NA, 70L, NA), `39200` = c(80L, NA, NA, NA, NA, NA
), `39700` = c(NA, 80L, NA, NA, NA, NA), `39800` = c(NA,
NA, 80L, NA, NA, NA), `39900` = c(NA, NA, NA, NA, NA, 80L
), `40000` = c(NA, NA, NA, 80L, 80L, NA), `40200` = c(90L,
NA, NA, NA, NA, NA), `40600` = c(NA, 90L, NA, NA, NA, NA),
`40700` = c(NA, NA, 90L, NA, NA, NA), `40800` = c(NA, NA,
NA, 90L, 90L, 90L), `41700` = c(100L, 100L, 100L, 100L, NA,
100L), `41800` = c(NA, NA, NA, NA, 100L, NA)), row.names = c(NA,
-6L), class = "data.frame")
我们可以使用
na.interp
fromforecast
library(forecast)
test[-1] <- t(apply(test[-1], 1, na.interp))
然后进行绘图
v1 <- unlist(test[2, -1])
plot(v1, names(v1), type = 'l')
v1我编辑了这个问题,谢谢你也许na.approw
lapply(test[-1],na.approx,na.rm=FALSE)
如果是按行库(zoo);t(应用(测试[-1],1,na.approx,na.rm=FALSE))
请检查预期输出是否如下
test[-1] <- t(apply(test[-1], 1, na.approx, na.rm = FALSE))
v1 <- unlist(test[2, -1])
plot(v1, names(v1), type = 'l')