将 NA 替换为 R 中的上一行和下一行平均值

标签 r replace na

如何快速用 NA 的前一行和下一行的平均值替换 NA?

  name grade
1    A    56
2    B    NA
3    C    70
4    D    96

这样 B 的成绩就是 63。

最佳答案

或者您可以尝试 zoo 包中的 na.approx:“缺失值 (NA) 由线性插值替换”

library(zoo)
x <- c(56, NA, 70, 96)
na.approx(x)
# [1] 56 63 70 96

如果您有多个连续的NA,这也适用:

vals <- c(1, NA, NA, 7, NA, 10)
na.approx(vals) 
# [1]  1.0  3.0  5.0  7.0  8.5 10.0

na.approx 基于 base 函数 approx,可以改为使用:

vals <- c(1, NA, NA, 7, NA, 10)
xout <- seq_along(vals)
x <- xout[!is.na(vals)]
y <- vals[!is.na(vals)]

approx(x = x, y = y, xout = xout)$y
# [1]  1.0  3.0  5.0  7.0  8.5 10.0

关于将 NA 替换为 R 中的上一行和下一行平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22916525/

相关文章:

list - 在 Pandas 中替换每个单元格的多个值

mysql - SQL REPLACE 在 phpmyadmin 中给出错误

将 NA 替换为具有限制的先前值

使用 replace_with_na 函数用 NA 替换范围外的值

r - 在 R 中的数据框中将 NA 转换为数字的问题

r - apply() 到 data.frame 的列

r - 什么是显示字数的简单可视化工具?

C# 像在 AS3 中一样用回调函数替换

r - 在 R 中逐个折叠数据

r - 如何确定简单回文 R 代码的时间复杂度?