我很难把for循环重构成dplyr管道。我需要引用 Dataframe a和之前计算过的行。有什么建议吗?
非常感谢!
a <- tibble::tribble(~ 'a', ~ 'b', ~ 'c',
.1, .2, .3,
.2, .4, .6,
.3, .6, .9)
b <- a
for (i in 2:nrow(a)) {
b[i, ] <- b[i - 1, ] + b[i, ] * (1 - b[i - 1, ])
}
c <- a |>
dplyr::mutate(dplyr::across(where(is.numeric),
~ dplyr::lag(.x, 1, 0) +
.x *
(1 - dplyr::lag(.x, 1, 0))))
d <- a |> dplyr::rowwise( )|>
dplyr::mutate(dplyr::across(where(is.numeric),
~ dplyr::lag(.x, 1, 0) +
.x *
(1 - dplyr::lag(.x, 1, 0))))
identical(b,c)
identical(b,d)
1条答案
按热度按时间m2xkgtsf1#
您可以使用
Reduce()
(如果愿意,也可以使用purrr::accumulate()
)。