用平均值替换 R 中的缺失值

标签 r if-statement average missing-data

我有一个数据框,其中包含缺失值的数据列,我想通过使用上方和下方单元格的值取平均值来替换缺失值。

 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/

相关文章:

sql - AVG , group by, WHERE AVG greater (>) 问题

ruby-on-rails - Ruby on Rails 平均水平?

java - 无法在 ArrayList<String> 中找到匹配的字符串

r - 在 R 中,如何将列表插入接受两个参数的函数中?

r - 如何使用合并来绑定(bind)两个数据框

r - 如何在绘图中添加颜色框?

C# int.TryParse 也许吧?

php - 在回显中以 Y-M-D 格式回显输入类型中的日期

mysql - 平均或计算平均

r - 绘制贝叶斯 beta 回归模型预测的置信区间