R 缺少值的上一行和下一行的平均值
我对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
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
的isdf[-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)