r - 用 R 插入多个 NA 值

标签 r na interpolation

我想插值多个 NA称为 tester 的矩阵中的值。

这是测试器的一部分,只有 1 列 NA 值,在整个 744x6 矩阵中,其他列也有多个:

ZONEID   TIMESTAMP         U10            V10            U100          V100
1        20121022 12:00    -1.324032e+00  -2.017107e+00 -3.278166e+00  -5.880225574
1        20121022 13:00    -1.295168e+00            NA  -3.130429e+00  -6.414975148
1        20121022 14:00    -1.285004e+00            NA  -3.068829e+00  -7.101699541
1        20121022 15:00    -9.605904e-01            NA  -2.332645e+00  -7.478168285
1        20121022 16:00    -6.268261e-01 -3.057278e+00  -1.440209e+00  -8.026791079

我已经安装了 zoo打包并使用代码library(zoo) .我曾尝试使用 na.approx函数,但它以线性方式返回:
na.approx(tester)
# Error ----> need at least two non-NA values to interpolate

na.approx(tester, rule = 2)
# Error ----> need at least two non-NA values to interpolate

na.approx(tester, x = index(tester), na.rm = TRUE, maxgap = Inf)

后来我试过:
Lines <- "tester"
library(zoo) 
z <- read.zoo(textConnection(Lines), index = 2)[,2] 
na.approx(z)

我再次得到相同的倍数 NA值错误。我也试过:
z <- zoo(tester)
index(Cz) <- Cz[,1]
Cz_approx <- na.approx(Cz)

同样的错误。

我一定是在做一些非常愚蠢的事情,但我真的很感激你的帮助。

最佳答案

您可以申请 na.approx仅在至少有两个非 NA 的列上值。这里我使用 colSums在 bool 矩阵上查找相关列。

# create a small matrix
m <- matrix(data = c(NA, 1, 1, 1, 1,
                     NA, NA, 2, NA, NA,
                     NA, NA, NA, NA, 2,
                     NA, NA, NA, 2, 3),
            ncol = 5, byrow = TRUE)

m
#      [,1] [,2] [,3] [,4] [,5]
# [1,]   NA    1    1    1    1
# [2,]   NA   NA    2   NA   NA
# [3,]   NA   NA   NA   NA    2
# [4,]   NA   NA   NA    2    3

library(zoo)

# na.approx on the entire matrix does not work
na.approx(m)
# Error in approx(x[!na], y[!na], xout, ...) : 
#   need at least two non-NA values to interpolate

# find columns with at least two non-NA values
idx <- colSums(!is.na(m)) > 1
idx
# [1] FALSE FALSE  TRUE  TRUE  TRUE

# interpolate 'TRUE columns' only
m[ , idx] <- na.approx(m[ , idx])
m
#      [,1] [,2] [,3]     [,4] [,5]
# [1,]   NA    1    1 1.000000  1.0
# [2,]   NA   NA    2 1.333333  1.5
# [3,]   NA   NA   NA 1.666667  2.0
# [4,]   NA   NA   NA 2.000000  3.0

关于r - 用 R 插入多个 NA 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25625476/

相关文章:

Python Rbf 给出没有重复坐标的奇异矩阵错误,为什么?

r dplyr 和 data.table : aggregate then join back to original table

r - R 中使用 NA 进行条件转置

r - 根据具有相似名称的其他列改变变量

r - pheatmap 比例 ="row"在 hclust(d, method = method) : NA/NaN/Inf in foreign function call 中给出错误

R:如何按行将 NA 替换为最新值

regex - 如何在替换的正则表达式部分中将变量插值到正则表达式模式中?

r - 使用 tidyverse 在按日期分组的大型 R 数据框中线性插值

r - 使用 ggplotly 的 map 未正确显示 (R)

R - 删除 df 中具有 0 个值的列,剩余 1 个或多个列