purrr映射:如何使用嵌套的tibble列作为函数参数

时间:2020-11-04 00:49:10

标签: tidyverse purrr

我很难理解如何将列从嵌套的小标题传递到函数参数中。例如,以下代码返回按“ am”分组的“ cyl”的均值:

test <- mtcars %>% 
  group_by(am) %>% 
  nest()

get_mean <- function (df) {
  return (mean(df$cyl))
}

test <- test %>% 
  mutate(mean = map_dbl(data, get_mean))

但是我想要除cyl以外的其他列的均值,并希望将其作为参数传递给函数吗?我知道这是错误的代码,但我会尝试编写如下代码:

test <- mtcars %>% 
  group_by(am) %>% 
  nest()

get_mean <- function (df, column) {
  return (mean(df${{column}}))
}

test <- test %>% 
  mutate(mean = map_dbl(data, get_mean, column))

任何有关此问题的帮助将不胜感激。我将如何column进入map函数,我应该怎么写df${{column}}

2 个答案:

答案 0 :(得分:0)

这应该做您想要的。您可以使用[[]]运算符而不是$使用变量内的字符串从数据帧中动态提取列。

library(purrr)
library(dplyr)
library(tidyr)

nest_data <- mtcars %>% 
  group_by(am) %>% 
  nest()

get_mean <- function (df, column) {
  return (mean(df[[column]]))
}

test_cyl <- nest_data %>% 
  mutate(mean = map_dbl(data, get_mean, "cyl"))
    
test_mpg <- nest_data %>% 
  mutate(mean = map_dbl(data, get_mean, "mpg"))

答案 1 :(得分:0)

您可以使用以下 -

library(dplyr)
library(purrr)

get_mean <- function (df, column) {
  df %>%
    select(-{{column}}) %>%
    unlist %>% mean
}

test %>%  ungroup %>% mutate(mean = map_dbl(data, get_mean, cyl))

#     am data                mean
#  <dbl> <list>             <dbl>
#1     1 <tibble [13 × 10]>  36.3
#2     0 <tibble [19 × 10]>  55.5