如何使用“purrr::accumulate”进行累积过滤?

2024-02-25

我正在寻找一种方法来做这样的事情

# 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)

这是输出可用于以下用途的示例:


你最初的例子accumulate(1:8, ~filter(mtcars, carb >= .x))不起作用,因为它使用累积值 (.x) 作为过滤条件,而不是“下一个”值 (.y)。尝试这个:

library(tidyverse)

accumulate(2:8, function(x,y) filter(x, carb >= y), .init=mtcars)
#> [[1]]
#>                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#> Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#> Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
#> Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
#> Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
#> Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
#> Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#> Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
#> Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
#> Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
#> Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
#> Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
#> Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
#> Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
#> Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
#> Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
#> Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
#> Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
#> Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
#> Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
#> Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
#> Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
#> AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
#> Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
#> Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
#> Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
#> Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
#> Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
#> Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
#> Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
#> Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
#> Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
#> 
#> [[2]]
#>     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> 1  21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#> 2  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#> 3  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
#> 4  14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#> 5  24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
#> 6  22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
#> 7  19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
#> 8  17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
#> 9  16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
#> 10 17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
#> 11 15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
#> 12 10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
#> 13 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
#> 14 14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
#> 15 30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
#> 16 15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
#> 17 15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
#> 18 13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
#> 19 19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
#> 20 26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
#> 21 30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
#> 22 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
#> 23 19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
#> 24 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
#> 25 21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
#> 
#> [[3]]
#>     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> 1  21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#> 2  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#> 3  14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#> 4  19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
#> 5  17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
#> 6  16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
#> 7  17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
#> 8  15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
#> 9  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
#> 10 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
#> 11 14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
#> 12 13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
#> 13 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
#> 14 19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
#> 15 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
#> 
#> [[4]]
#>     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
#> 1  21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
#> 2  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
#> 3  14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
#> 4  19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
#> 5  17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
#> 6  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
#> 7  10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
#> 8  14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
#> 9  13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
#> 10 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
#> 11 19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
#> 12 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
#> 
#> [[5]]
#>    mpg cyl disp  hp drat   wt qsec vs am gear carb
#> 1 19.7   6  145 175 3.62 2.77 15.5  0  1    5    6
#> 2 15.0   8  301 335 3.54 3.57 14.6  0  1    5    8
#> 
#> [[6]]
#>    mpg cyl disp  hp drat   wt qsec vs am gear carb
#> 1 19.7   6  145 175 3.62 2.77 15.5  0  1    5    6
#> 2 15.0   8  301 335 3.54 3.57 14.6  0  1    5    8
#> 
#> [[7]]
#>   mpg cyl disp  hp drat   wt qsec vs am gear carb
#> 1  15   8  301 335 3.54 3.57 14.6  0  1    5    8
#> 
#> [[8]]
#>   mpg cyl disp  hp drat   wt qsec vs am gear carb
#> 1  15   8  301 335 3.54 3.57 14.6  0  1    5    8

Created on 2019-11-21 by the reprex package (v0.3.0)

.init 参数从 mtcars 开始,然后每一步都使用序列 (y) 中的增量进行过滤,并将过滤后的数据帧作为“累积”值 (x) 传递到下一次迭代。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用“purrr::accumulate”进行累积过滤? 的相关文章

  • R - 在浏览器中获取帮助而不是内置的 R 帮助程序

    我见过 R help 的两种不同行为 当你输入 density例如 帮助已在您的默认浏览器中打开 帮助在内置 R 帮助程序中打开 R 中的窗口 我目前有第二种行为 但我想在浏览器中打开帮助 我可以轻松地在这两种行为之间切换吗 无需重新安装
  • 可以明确声明包依赖项的版本吗?

    我倾向于对我编写的代码进行明确而不是隐含的描述 因此 在成功创建自己的包之后 我立即想到的下一件事是如何最好地确保代码的健壮性和可靠性 其中一部分与我的包所依赖的包有关 实际问题 在这方面 是否可以明确声明需要 期望哪个版本的包依赖项 我正
  • 将密度曲线拟合到 R 中的直方图

    R中有没有可以将曲线拟合到直方图的函数 假设您有以下直方图 hist c rep 65 times 5 rep 25 times 5 rep 35 times 10 rep 45 times 4 看上去很正常 但其实是歪曲的 我想拟合一条倾
  • 将summary()写入as.data.frame以在ggplot / R中使用

    请查找 af 数据样本t below 我正在使用以下方法进行竞争风险分析etmCIF来自etm package 产生以下结果 这很好 但需要更好的图形 曾经有一个ggtrans etm函数将数据导入ggplot 然而 这个功能显然被删除了
  • R 中的 NA 替换函数

    我正在尝试替换矩阵中的 NA mat 零 我在用着mat is na mat lt 0 当我有 18946 个变量的 94531 个观察值或更小的矩阵时 效果很好 但我在 22752 个变量的 112039 个观察值的矩阵上尝试它 R 显示
  • 用于清除工作空间和转储存储的 R 全局函数

    我希望创建一个全局函数来清除我的工作区并转储我的内存 我将我的函数称为 cleaner 并希望它执行以下代码 remove list ls gc 我尝试在全局环境中创建该函数 但是当我运行它时 控制台仅打印该函数的文本 在我要获取的函数文件
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 将值替换为其各自列的名称

    我有一个数据框 Code 401k CVS 101A true 231N true FD54 true 99JB 85F4 true 我试图用相应的列名称 例如 401k 替换 true 字符值 这是我想要的输出 Code 401k CVS
  • 如何在不循环的情况下添加组ID?

    我有数据框 例如 productid ordernum p1 10 p2 20 p3 30 p4 5 p5 20 p6 8 我想添加另一列 称为 groupid 它将产品按顺序分组在一起 一旦 sum ordernum 达到 30 分配一个
  • 如何使用 R 中带引号的字符值内的序列读取 CSV?

    这是一个包含两个字符列的 CSV 文件 key value a 所有字符值都用双引号引起来 并且有一个顺序 在值之一内 转义引号加分隔符 我无法通过 read csv readr 中的 read csv 或 data table 中的 fr
  • 查找数据帧列表中同一列中的所有重复值并将其转换为 NULL

    我有一个清单BELGIAN COAST list包含数百个数据帧 df1 df2 15 列 X 1000 行 每个数据帧的最后一列称为Chemicals并包含一些字符 例如Sulfate or Ammonia 但是这一列有很多行Chemic
  • 限制数据框中所有单元格的字符串长度?

    您好 有没有一种方法可以限制 data frame 中所有列的字符串文本大小 而不必循环遍历每一列并一次使用 str trunc 之类的东西 例如下面的数据框 我可以将所有文本大小限制为仅 5 个字符 而不必一次只执行一列吗 如果有 50
  • 仅保留百分比的尾随零

    给出以下示例 library pander tableAbs lt Titanic 1 1 tablePct lt round prop table tableAbs 100 2 table lt cbind tableAbs tableP
  • 将数据从 R 导出到 Excel

    我试图将从 R 获得的一些结果导出到 Excel 中 但未成功 我尝试过以下代码 write table ALBERTA1 D ALBERTA1 txt sep t write csv ALBERTA1 ALBERTA1 csv your
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • R - 通过覆盖和递归合并列表

    假设我有两个带有名字的列表 a list a 1 b 2 c list d 1 e 2 d list a 1 b 2 b list a 2 c list e 1 f 2 d 3 e 2 我想递归地合并这些列表 如果第二个参数包含冲突的值 则
  • 使用 dplyr::filter 的整洁方式是什么?

    使用下面的函数调用foo c b 输出以内联方式显示 正确的写作方式是什么df gt filter x gt x 我已经包含了一个使用的示例mutate以整洁的风格与之对比filter foo lt function variables x
  • 16 位以上整数的计算

    我有两个大整数 两者都超过 16 位 确切地说是 20 位 而且我知道由于双精度浮点运算 我在使用这些数字进行计算甚至将它们存储在变量中 独立于编程语言 时受到限制 不过 我想也许gmp图书馆应该处理它们 但不幸的是它没有 可以计算更大的整
  • 具有 dplyr、tidyverse 和 broom 的相关矩阵 - P 值矩阵

    全部 我想使用以下方法从相关矩阵中获取 p 值dplyr 和 或扫帚包 并同时测试多个变量 我知道其他方法 但 dplyr 对我来说似乎更简单 更直观 此外 dplyr 需要关联每个变量以获得特定的 p 值 这使得该过程更容易 更快 我检查
  • 非闪亮上下文中的反应式对象绑定

    实际问题 你怎样才能近似反应性环境 行为 http shiny rstudio com tutorial lesson6 建立者shiny http shiny rstudio com函数 或者甚至可能在一个函数中使用这些函数无光泽上下文以

随机推荐