gpt4 book ai didi

r - Purrr 和映射向量输出函数

转载 作者:行者123 更新时间:2023-12-05 06:27:59 32 4
gpt4 key购买 nike

我正在努力了解 purrr,但我正在为一些本应很容易的事情而苦苦挣扎。

假设我有以下男性和女性数据

n <- 1000
toydata <- data.frame(
sex = as.character(ifelse(rnorm(n)>0, "M", "F")),
value = rnorm(n)
)

现在,我要计算值列的以下五个分位数

p <- c(.1, .25, .5, .75, .9)

当我使用分位数函数对 + map 进行变异时,将返回一个向量列表,如预期的那样存储为附加列:

toydata %>%
group_by(sex) %>%
nest() %>%
mutate(
quantiles = map(data, ~quantile(.$value, p, na.rm=TRUE))
)


# A tibble: 2 x 3
sex data quantiles
<fct> <list> <list>
1 F <tibble [491 × 1]> <dbl [5]>
2 M <tibble [509 × 1]> <dbl [5]>

将五个分位数存储为数据框的五个新列的优雅方法是什么?

最佳答案

这是一个选项:

toydata %>%
group_by(sex) %>%
nest() %>%
crossing(p) %>%
mutate(
quantiles = map2_dbl(data, p, ~quantile(.x$value, .y, na.rm=TRUE)),
p = paste0('quantile_', p)
) %>%
spread(p, quantiles)

第二个选项:

toydata %>%
group_by(sex) %>%
nest() %>%
mutate(
quantiles = map_chr(data, ~quantile(.$value, p, na.rm=TRUE) %>% str_c(collapse = '_'))
) %>%
separate(quantiles, paste0('quantile_', p), sep = '_') %>%
mutate_at(vars(starts_with('quantile')), as.numeric)

输出:

  sex   data               quantile_0.1 quantile_0.25 quantile_0.5 quantile_0.75 quantile_0.9
<fct> <list> <dbl> <dbl> <dbl> <dbl> <dbl>
1 F <tibble [512 x 1]> -1.31 -0.758 0.0400 0.623 1.32
2 M <tibble [488 x 1]> -1.37 -0.795 -0.178 0.603 1.25

关于r - Purrr 和映射向量输出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54768090/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com