在 R 中的行和输出数据帧上应用 na.approx

Apply na.approx on row and output dataframe in R

给定以下数据框:

df1 <- data.frame(Company = c('A','B','C','D','E'), `X1980` = c(NA, 5, 3, 8, 13),
                                `X1981` = c(20, NA, 23, 11, 29),
                                `X1982` = c(NA, 32, NA, 41, 42),
                                `X1983` = c(45, 47, 53, 58, NA))

我想通过对生成以下数据框的行进行插值,用值替换 NA:

Company  1980  1981  1982  1983
   A      NA    20   32,5   45
   B      5    18,5   32    47
   C      3     23    38    53
   D      8     11    41    58
   E      13    29    42    NA

我尝试将 na.apporox 与应用结合使用:

df1[-1] <- t(apply(df1[-1], 1, FUN = na.approx))

但这会导致以下错误:

Fehler in h(simpleError(msg, call)) : 
  Fehler bei der Auswertung des Argumentes 'x' bei der Methodenauswahl für Funktion 't': dim(X) muss positive Länge haben

在此先感谢您的帮助!!!

编辑: 我忘了在 na.approx 函数中定义如何处理 NA。

df1[-1] <- t(apply(df1[-1], 1, na.approx, na.rm=FALSE))

这会产生所需的输出!

据我所知,这种插值方法不处理序列末尾的 NA,这是条目 Ex1983 的情况。因此,na.approx(至少是 zoo 包中的那个)为您提供了一个可选参数 na.rm select 是否要删除这些 NA。

默认情况下它是 TRUE,所以它会删除,给你的矩阵第 4 列只有 3 个元素,而不是 4 个(作为其余列),所以它会产生那个错误。要解决这个问题,您只需将该参数设置为 FALSE:

df1[-1] <- t(apply(df1[-1], 1, FUN = zoo::na.approx, na.rm=FALSE))

输出:

> df1
  Company X1980 X1981 X1982 X1983
1       A    NA    20    NA    45
2       B     5    NA    32    47
3       C     3    23    NA    53
4       D     8    11    41    58
5       E    13    29    42    NA

为了填补那个 NA,如果你需要我,我可以帮助你使用来自 的答案。