我有一个数据框,其中一栏已完全填充,另一栏已部分填充。我想用以下公式填充第二列中的na s:col3 = col1*lag(col2)
当我使用mutate时,它会迭代一次。我更喜欢使用dplyr函数,因为我需要将此函数应用于更大的样本。
这是数据框
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)
答案 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