如何根据 R 中另一行中的值来估算缺失值

问题描述 投票:0回答:1

我需要获取每个人的空值(具有年份值的最早文件日期)正上方的年份,然后用该年份填充缺失的值。我有一种使用子集和赋值的方法,但它需要循环数据,并且对于数十亿行,这是不可行的。我附上了模拟数据集的图像来显示数据的样子。

enter image description here

在此图像中,前三个空值将填充 1965 年,后两个空值将填充 1979 年。

r imputation
1个回答
0
投票

由于您无法使用

tidyr::fill()
,您可以使用
ave
尝试以下方法。

样本数据

df <- data.frame(ID = c(1,1,1,1,1,1,2,2,2,2),
                 Year = c(1992, 1965, 1965, NA, NA, NA, 1979, 1979, NA, NA))

如果您有权访问

zoo
软件包,这非常简单:

# zoo::na.locf
df$Filled_Year_zoo <- ave(df$Year, df$ID, FUN = \(x) zoo::na.locf(x, na.rm = FALSE))

如果没有,完全基本的 R 方法可能是:

### Full base R
df$Filled_Year_base <- ave(df$Year, df$ID, 
                           FUN = \(x) x[which(is.na(x))] <- tail(x[which(!is.na(x))], 1))

结果:

#    ID Year Filled_Year_zoo Filled_Year_base
# 1   1 1992            1992             1965
# 2   1 1965            1965             1965
# 3   1 1965            1965             1965
# 4   1   NA            1965             1965
# 5   1   NA            1965             1965
# 6   1   NA            1965             1965
# 7   2 1979            1979             1979
# 8   2 1979            1979             1979
# 9   2   NA            1979             1979
# 10  2   NA            1979             1979
© www.soinside.com 2019 - 2024. All rights reserved.