R 缺少值的上一行和下一行的平均值

R 缺少值的上一行和下一行的平均值,r,mean,missing-data,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。有什么想法吗?您可以在软件包zoo中使用na.appro

我对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。有什么想法吗?

您可以在软件包
zoo
中使用
na.approx

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


df[-1]今晚要带回家的另一个功能。多谢各位+1您可以使用
sapply
sapply(df,na.approx)
df[-1]缩短代码,或可能比
lappy
is
df[-1]或
as.data.frame(na.approx(df))
更快。此外,您可能希望将数据帧转换为更方便处理时间序列的zoo对象:
library(zoo); Z
df <- sapply(df, na.approx)
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)