首页 > 解决方案 > 如何将 na.approx 应用于矩阵中的一行?

问题描述

我正在尝试对数据框中的所有行进行插值。我正在使用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.910 1.780 1.620 [22] 1.650 1.380 1.370

标签: rinterpolationna.approx

解决方案


因为na.approx按列计算而不是按行计算。根据?na.approx(from 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

推荐阅读