迭代地填充缺失值

时间:2018-12-17 17:49:52

标签: r dplyr na

我有一个数据框,其中一栏已完全填充,另一栏已部分填充。我想用以下公式填充第二列中的 s:col3 = col1*lag(col2)

当我使用mutate时,它会迭代一次。我更喜欢使用函数,因为我需要将此函数应用于更大的样本。

这是数据框

dd <- tibble::tribble(~col1, ~col2,
  1.1127493, 34533.98,
  0.9432176, 32573.06,
  0.9130100, 29758.64,
  0.6593648, 19621.80,
  0.9222222, 18095.66,
  0.7349398, 13299.22,
  0.9836066, 13081.20,
  0.8518519,       NA,
  1.0000000,       NA,
  1.0000000,       NA,
  1.0000000,       NA,
  1.0000000,       NA)

1 个答案:

答案 0 :(得分:0)

我发现很难理解您要记住的过程以及为什么要保证终止。也许您可以更详细地指定过程。同时,我创建了一个过程以关闭您所需要的过程,以作为您的指南,以便您可以编写自己的解决方案。

iter_func <- function(c1, c2){
  c3 <- c1 + dplyr::lag(c2)
  na_pos <- which(is.na(c3))
  non_na_pos <- which(!is.na(c3))

  while(length(na_pos)){
    c3[na_pos[1]] <- c3[non_na_pos[length(non_na_pos)]]
    c3 <- c1 + c3

    na_pos <- which(is.na(c3))
    non_na_pos <- which(!is.na(c3))
  }

  c3
}

dd %>% dplyr::mutate(col3 = iter_func(col1, col2))

HTH