r-在data.table中使用时,保留quantile()函数中的名称



我想保持命名向量由类似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

最新更新