r - 传递给 map() 的列的访问名称

标签 r tidyverse purrr

如何访问 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

最佳答案

使用 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) })

简称。

关于r - 传递给 map() 的列的访问名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48965261/

相关文章:

r - 如何使用R精确匹配整个数据集中的两列值

r - 如何根据列表中每个元素的名称使用map_if

rvest:处理不同数量的嵌套类

r - 错误 : memory exhausted (limit reached? )

r - 根据id提取可达行

r - R中根据多个条件计算字符出现次数

r - 如何用这些列的中位数替换数值列中的 NA?

r - 如何以编程方式生成 70 多个变量的 ggplot?

r - 如何绘制时间序列的一阶差分

r - 矢量化 stringr str_match 以删除 for 循环