Итеративно заполнить пропущенные значения - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть фрейм данных с одним полностью заполненным столбцом, а другой с частично заполненным.Я хотел бы заполнить 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 голосов
/ 17 декабря 2018

Мне трудно понять процедуру, которую вы имеете в виду, и почему она гарантированно прекращается.Может быть, вы можете указать свою процедуру более подробно.Тем временем я создал процедуру, близкую к той, которую вы запрашиваете, которая будет служить вам руководством, чтобы вы могли написать свое собственное решение.

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

...