缺失值的平均上一行和下一行

Ale*_*lex 3 r mean missing-data

我对R比较新,遇到了一些问题.我正在使用某些年份缺少值的数据框.例如:

year var1 var2
1972 1.3  1.4
1973 1.6  2.8
1974 2.0  1.5
1975 NA   NA
1976 1.5  2.1
1977 NA   NA
1978 1.9  1.1
Run Code Online (Sandbox Code Playgroud)

对于每个NA,我想取上一行和下一行的平均值.因此1975年的var1和var2应分别为1.75和1.8.1977年他们应该是1.7和1.6.有任何想法吗?

nru*_*ell 6

你可以na.approx在包中使用zoo:

library(zoo)
df$var1 <- na.approx(df$var1)
df$var2 <- na.approx(df$var2)
##
> df
  year var1 var2
1 1972 1.30  1.4
2 1973 1.60  2.8
3 1974 2.00  1.5
4 1975 1.75  1.8
5 1976 1.50  2.1
6 1977 1.70  1.6
7 1978 1.90  1.1
Run Code Online (Sandbox Code Playgroud)

数据:

df <- read.table(
  text="year var1 var2
1972 1.3  1.4
1973 1.6  2.8
1974 2.0  1.5
1975 NA   NA
1976 1.5  2.1
1977 NA   NA
1978 1.9  1.1",
  header=TRUE)
Run Code Online (Sandbox Code Playgroud)

  • 或者`df [-1] < - lapply(df [-1],na.approx)`将它保存在数据框中.`sapply`返回一个矩阵 (4认同)