我想通过一个类似quantile()
的函数来保持命名向量的生成,其中我想有一个名为name
的列,它是传递的概率的值.
使用tidyVerse给出了我想要的示例:
library(TidyDensity)
library(data.table)
library(reshape)
func <- quantile
x <- mtcars$mpg
tb <- tidy_bootstrap(x) %>%
bootstrap_unnest_tbl()
df_tbl <- tb %>%
split(.$sim_number) %>%
map(~ .x %>% pull(y))
purrr::map(
df_tbl, ~ func(.x) %>%
purrr::imap(.f = ~ cbind(.x, name = .y)) %>%
purrr::map_df(dplyr::as_tibble)
) %>%
purrr::imap(.f = ~ cbind(.x, sim_number = .y)) %>%
purrr::map_df(dplyr::as_tibble) %>%
dplyr::select(sim_number, name, .x) %>%
dplyr::mutate(.x = as.numeric(.x)) %>%
dplyr::mutate(sim_number = factor(sim_number)) %>%
dplyr::rename(value = .x)
# A tibble: 10,000 × 3
sim_number name value
<fct> <chr> <dbl>
1 1 0% 10.4
2 1 25% 14.7
3 1 50% 19.2
4 1 75% 22.8
5 1 100% 33.9
6 2 0% 10.4
7 2 25% 14.7
8 2 50% 17.8
9 2 75% 21.4
10 2 100% 32.4
# … with 9,990 more rows
当我使用data.table
时,我不知道如何将从quantile()
函数返回的向量的名称列起来,而这实际上可以来自任何函数.
以下是我得到的信息:
tbd <- tb %>%
as.data.table()
> tbd[, .(quantile = func(y)), by = sim_number]
sim_number quantile
1: 1 10.4
2: 1 14.7
3: 1 19.2
4: 1 22.8
5: 1 33.9
---
9996: 2000 10.4
9997: 2000 15.5
9998: 2000 17.8
9999: 2000 21.4
10000: 2000 32.4