繁体   English   中英

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

[英]purrr map: How to use nested tibble column as function argument

我在理解如何将一列从嵌套的 tibble 传递给函数参数时遇到了一些困难。 例如,以下代码返回按“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}}

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

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

您可以使用以下 -

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM