如何将na.approx应用于矩阵中的一行?

时间:2019-04-13 18:49:57

标签: r interpolation na.approx

我正在尝试对数据框中的所有行进行插值。我正在使用str(c(df1, df2)) #List of 6 # $ year1 : Factor w/ 3 levels "2001","2002",..: 1 2 3 # $ countries1: Factor w/ 3 levels "Canada","Mexico",..: 1 3 2 # $ color1 : Factor w/ 3 levels "black","blue",..: 1 3 2 # $ year2 : Factor w/ 3 levels "2010","2011",..: 1 2 3 # $ countries2: Factor w/ 3 levels "France","Germany",..: 1 2 3 # $ color2 : Factor w/ 3 levels "green","white",..: 2 3 1 。这样可以对值进行插值,但是其中一些超出范围。

如果我改用apply(data_final,2,na.approx),则与使用na.approx(data_final[8,])的行相比,该行的值将有所不同。

此外,如果我执行apply,我将得到与na.approx(data_final)相同的结果。这没有任何意义,因为假定应该将apply(data_final,2,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

1 个答案:

答案 0 :(得分:0)

因为na.approx进行列计算,而不是行计算。根据{{​​1}}(来自?na.approx),用法是

  

na.approx(object,...)

,参数说明为

  

如果obj具有多个列,则将上述策略应用于每一列。


使用可复制的示例

zoo

逐行应用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