我正在寻找一种方法来做这样的事情
# this doesnt work
# accumulate(1:8, ~filter(mtcars, carb >= .x))
这样我就可以检查不同截止值的一些汇总统计数据。我可以简单地做
# this works but redundant filtering is done
map2(list(mtcars), 1:8, ~filter(.x, carb >= .y))
但由于我的数据相当大,因此过滤掉之前步骤中已经过滤掉的值是没有意义的。本质上,这只是多次复制原始数据帧,然后分别过滤每个数据帧。我正在查看 purrr 包中的accumulate,但该函数似乎不适合这个问题(我希望我在这一点上是错的)。基本 R 解决方案可以是
# something like this works, but is ugly
output <- vector("list", length(1:8) + 1)
output[[1]] <- mtcars
for (i in 1:8) {
output[[i + 1]] <- filter(output[[i]], carb >= i)
}
output[[1]] <- NULL
但这并不是特别优雅。我怎样才能更好地完成这个任务?
# the above code assumes
library(tidyverse)
mtcars <- as_tibble(mtcars)
这是输出可用于以下用途的示例: