我需要获取每个人的空值(具有年份值的最早文件日期)正上方的年份,然后用该年份填充缺失的值。我有一种使用子集和赋值的方法,但它需要循环数据,并且对于数十亿行,这是不可行的。我附上了模拟数据集的图像来显示数据的样子。
在此图像中,前三个空值将填充 1965 年,后两个空值将填充 1979 年。
由于您无法使用
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