我有一个数据框,其中包含缺失值的数据列,我想通过使用上方和下方单元格的值取平均值来替换缺失值。
df1<-c(2,2,NA,10, 20, NA,3)
if(df1[i]== NA){
df1[i]= mean(df1[i+1],df1[i-1])
}
但是,我收到了这个错误
Error in if (df1[i] == NA) { : missing value where TRUE/FALSE needed
In addition: Warning message:
In if (df1[i] == NA) { :
the condition has length > 1 and only the first element will be used
如果能提供解决此问题的任何指导,我们将不胜感激。
最佳答案
如果你确定你没有任何连续的 NA 值并且第一个和最后一个元素永远不是 NA,那么你可以这样做
df1<-c(2,2,NA,10, 20, NA,3)
idx<-which(is.na(df1))
df1[idx] <- (df1[idx-1] + df1[idx+1])/2
df1
# [1] 2.0 2.0 6.0 10.0 20.0 11.5 3.0
这应该比循环更有效。
关于用平均值替换 R 中的缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080184/