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

时间:2014-10-28 15:19:21

标签: 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

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

1 个答案:

答案 0 :(得分: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
  • 正如@Jilber指出的那样,这可以用

    更简洁地完成
    df <- sapply(df, na.approx)
    
  • 根据@Richard Scriven的评论,你可能想要保留 带{/ 1>的data.frame课程

    df[-1] <- lapply(df[-1], na.approx)
    

    df[-1] <- vapply(df[-1], na.approx, numeric(nrow(df))) 
    

数据:

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)
相关问题