【问题标题】:r — what’s a more stream-oriented (%>%) idiom for map(map(Auto, range), function(col) {paste0(col[[1]], “,” col[[2]])})r — map(map(Auto, range), function(col) {paste0(col[[1]], “,” col[[2]])} 的更面向流 (%>%) 的习惯用法是什么?
【发布时间】:2020-10-09 20:04:56
【问题描述】:

以下代码迭代给定数据帧的所有列(内置 R 示例中的“自动”),

获取整列的范围,

然后将范围从 range-obj 转换为 str-format 以供查看

library(purrr)
map(map(Auto, range), function(col) {paste0(col[[1]], "," col[[2]])})

我想让它更加面向流 (dplyr)。我已经尝试使用 tibble()rowwise() 进行包装,但我无法做到。

【问题讨论】:

  • 您的代码由于一些琐碎的原因而无法正常工作。 "," 中的逗号周围有智能引号。我将它们更改为直引号。在您的 paste0 呼叫中,您需要在 "," 之后使用逗号。而且你没有告诉我们对象Auto中存储了哪些值。
  • 另一个有趣的选择:map(mtcars, ~paste(range(.x), collapse = ', ')) 。也适用于其他 map_ 调用,例如map_dfmap_chr.
  • @Josh 好的,谢谢。下次我会试着检查一下。正如你所知道的,我使用眼球将它从我的计算机 1 转移到我的浏览计算机 2 :D
  • @nniloc 非常酷!期待记住这一点。谢谢

标签: r dplyr tidyr purrr


【解决方案1】:

在这种情况下,我更喜欢使用 map(一个 map 调用就足够了),但您也可以使用来自 {dplyr} 的 across(参见下面的示例)。在后者的情况下,输出将是一个data.frame,它将包含一个包含许多列表列的行,而这些列又包含range 的两个值。您也可以删除列表,只使用两行 data.frame,包含 minmax

顺便说一句。 rowwise 在这里无济于事,因为我们需要对整个列进行操作才能得到它的range

library(dplyr)
library(purrr)

mtcars %>% 
map( ~ paste(range(.x)[1],
             range(.x)[2],
             sep = ", "))
#> $mpg
#> [1] "10.4, 33.9"
#> 
#> $cyl
#> [1] "4, 8"
#> 
#> $disp
#> [1] "71.1, 472"
#> 
#> $hp
#> [1] "52, 335"
#> 
#> $drat
#> [1] "2.76, 4.93"
#> 
#> $wt
#> [1] "1.513, 5.424"
#> 
#> $qsec
#> [1] "14.5, 22.9"
#> 
#> $vs
#> [1] "0, 1"
#> 
#> $am
#> [1] "0, 1"
#> 
#> $gear
#> [1] "3, 5"
#> 
#> $carb
#> [1] "1, 8"

mtcars %>% 
  summarise(across(everything(),
                   ~ paste(range(.x)[1],
                           range(.x)[2],
                           sep = ", ") %>% 
                     list))
#>          mpg  cyl      disp      hp       drat           wt       qsec   vs
#> 1 10.4, 33.9 4, 8 71.1, 472 52, 335 2.76, 4.93 1.513, 5.424 14.5, 22.9 0, 1
#>     am gear carb
#> 1 0, 1 3, 5 1, 8

mtcars %>% 
  summarise(across(everything(), range))
#>    mpg cyl  disp  hp drat    wt qsec vs am gear carb
#> 1 10.4   4  71.1  52 2.76 1.513 14.5  0  0    3    1
#> 2 33.9   8 472.0 335 4.93 5.424 22.9  1  1    5    8

reprex package (v0.3.0) 于 2020 年 10 月 9 日创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 2011-11-20
    • 2020-08-14
    • 2013-11-20
    • 2018-12-21
    • 1970-01-01
    相关资源
    最近更新 更多