【问题标题】:How to apply na.approx to a row in a matrix?如何将 na.approx 应用于矩阵中的一行?
【发布时间】:2019-09-04 05:38:07
【问题描述】:

我正在尝试对数据框中的所有行进行插值。我正在使用apply(data_final,2,na.approx)。这会对值进行插值,但有些超出范围。

如果我改用na.approx(data_final[8,]),与使用apply 的行相比,我在该行得到不同的值。

另外,如果我执行na.approx(data_final),我会得到与apply(data_final,2,na.approx) 相同的结果。这没有任何意义,因为据说 apply 将 na.approx 函数应用于数据框中的每一行。

申请(data_final,2,na.approx) [8,] 0.63 0.49 2.40 2.65 3.65 5.80 0.96 1.85 1.43 1.25 1.21 1.20 0.91 1.00 0.96 0.80 1.42 1.82 1.910

na.approx(data_final[8,]) [1] 0.630 0.490 0.584 0.678 0.772 0.866 0.960 1.850 1.430 1.250 1.210 1.200 0.910 1.000 0.960 0.800 1.420 1.820 1.9210 1.780 1.6 [22] 1.650 1.380 1.370

【问题讨论】:

    标签: r interpolation na.approx


    【解决方案1】:

    因为na.approx 是按列计算而不是按行计算。根据?na.approx(来自zoo),用法是

    na.approx(对象, ...)

    参数说明为

    如果 obj 有多于一列,则上述策略适用于每一列。


    使用可重现的示例

    library(zoo)
    df1 <- data.frame(col1 = c(2, NA, 3, 4), col2 = c(1, 3, NA, 2))
    na.approx(df1)
    #     col1 col2
    #[1,]  2.0  1.0
    #[2,]  2.5  3.0
    #[3,]  3.0  2.5
    #[4,]  4.0  2.0
    

    按列应用na.approx

    sapply(df1, na.approx)
    #     col1 col2
    #[1,]  2.0  1.0
    #[2,]  2.5  3.0
    #[3,]  3.0  2.5
    #[4,]  4.0  2.0
    

    【讨论】:

    • 所以,如果我想要第二个输出,我必须遍历数据框,将每一行作为向量并使用 na.approx?
    • @CarlomagnoAmaya 您有什么要求?是按行还是按列填充NA?
    • 是对整行进行插值,作为向量。不是二维对象。
    • @CarlomagnoAmaya 在这种情况下使用df1[] &lt;- t(apply(df1, 1, na.approx))
    猜你喜欢
    • 2011-12-06
    • 2021-07-22
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 2013-02-23
    • 2013-11-22
    • 1970-01-01
    相关资源
    最近更新 更多