在 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,如果你需要我,我可以帮助你使用来自 的答案。
给定以下数据框:
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,如果你需要我,我可以帮助你使用来自