我想保持命名向量由类似quantile()
的函数生成,其中我想有一个名为name
的列,它是传递的probs的值。
使用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
我们可以melt
melt(tbd[, as.list(func(y)), sim_number], id.var = 'sim_number',
value.name = 'quantile')
-输出
sim_number variable quantile
<fctr> <fctr> <num>
1: 1 0% 14.7
2: 2 0% 10.4
3: 3 0% 10.4
4: 4 0% 10.4
5: 5 0% 10.4
---
9996: 1996 100% 30.4
9997: 1997 100% 33.9
9998: 1998 100% 33.9
9999: 1999 100% 33.9
10000: 2000 100% 33.9