代码之家  ›  专栏  ›  技术社区  ›  Rasmus Larsen

传递给map()的列的访问名

  •  3
  • Rasmus Larsen  · 技术社区  · 7 年前

    如何访问purrr::map()的输入名称?

    此代码:

    library(tidyverse)
    library(janitor)
    
    diamonds %>% 
        select(cut, color) %>%
        map( function(x)  janitor::tabyl(x)   ) 
    

    输出:

    $cut
              x     n    percent
    1      Fair  1610 0.02984798
    2      Good  4906 0.09095291
    3 Very Good 12082 0.22398962
    4   Premium 13791 0.25567297
    5     Ideal 21551 0.39953652
    
    $color
      x     n    percent
    1 D  6775 0.12560252
    2 E  9797 0.18162773
    3 F  9542 0.17690026
    4 G 11292 0.20934372
    5 H  8304 0.15394883
    6 I  5422 0.10051910
    7 J  2808 0.05205784
    

    但我正在尝试访问传递给map的列的名称。 类似于以下内容(伪代码):

    diamonds %>% 
        select(cut, color) %>%
        map( function(x) { table_1 <- janitor::tabyl(x)
                           table_1$column_name <- SOMEHOW_EXTRACT_NAME(x)
                          }
                         ) 
    

    要使用列中输入的名称获取所需的输出,请执行以下操作:

    $cut
              x     n    percent column_name
    1      Fair  1610 0.02984798         cut
    2      Good  4906 0.09095291         cut
    3 Very Good 12082 0.22398962         cut
    4   Premium 13791 0.25567297         cut
    5     Ideal 21551 0.39953652         cut
    
    $color
      x     n    percent column_name
    1 D  6775 0.12560252       color
    2 E  9797 0.18162773       color
    3 F  9542 0.17690026       color
    4 G 11292 0.20934372       color
    5 H  8304 0.15394883       color
    6 I  5422 0.10051910       color
    7 J  2808 0.05205784       color
    
    1 回复  |  直到 7 年前
        1
  •  9
  •   akuiper    7 年前

    使用 imap ,使用它可以访问名称作为第二个参数:

    diamonds %>% 
        select(cut, color) %>%
        imap(
            function(x, name) { 
                table_1 <- janitor::tabyl(x)
                table_1$column_name <- name
                table_1
            }
        ) 
    
    #$cut
    #          x     n    percent column_name
    #1      Fair  1610 0.02984798         cut
    #2      Good  4906 0.09095291         cut
    #3 Very Good 12082 0.22398962         cut
    #4   Premium 13791 0.25567297         cut
    #5     Ideal 21551 0.39953652         cut
    
    #$color
    #  x     n    percent column_name
    #1 D  6775 0.12560252       color
    #2 E  9797 0.18162773       color
    #3 F  9542 0.17690026       color
    #4 G 11292 0.20934372       color
    #5 H  8304 0.15394883       color
    #6 I  5422 0.10051910       color
    #7 J  2808 0.05205784       color
    

    diamonds %>% 
        select(cut, color) %>%
        imap( ~ { janitor::tabyl(.x) %>% mutate(column_name = .y) })
    

    简而言之。