繁体   English   中英

map_dfr 输出一行而不是一列

[英]map_dfr outputting a row rather than a column

这类似于purrr::map_dfr 按列绑定,而不是按预期的行绑定,但那里的解决方案对我不起作用。 我有一个像

beta_df <- structure(list(intercept = c(-2.75747056032685, -2.90831892599742, 
-2.92478082251453, -2.99701559041538, -2.88885796048347, -3.09564193631675
), B1 = c(0.0898235360814854, 0.0291839369781567, 0.0881023522236231, 
0.231703026085554, 0.0441573699433149, 0.258219673780526), B2 = c(-0.222367437619057, 
0.770536384299238, 0.199648657850609, 0.0529038155448773, 0.00310458335580774, 
0.132604387458483), B3 = c(1.26339268033385, 1.29883641278223, 
0.949504940387809, 1.26904511447941, 0.863882674439083, 0.823907268679309
), B4 = c(2.13662994525526, 1.02340744740827, 0.959079691725652, 
1.60672779812489, 1.19095838867883, -0.0693120654049908)), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

#> # A tibble: 6 × 5
#>   intercept     B1       B2    B3      B4
#>       <dbl>  <dbl>    <dbl> <dbl>   <dbl>
#> 1     -2.76 0.0898 -0.222   1.26   2.14  
#> 2     -2.91 0.0292  0.771   1.30   1.02  
#> 3     -2.92 0.0881  0.200   0.950  0.959 
#> 4     -3.00 0.232   0.0529  1.27   1.61  
#> 5     -2.89 0.0442  0.00310 0.864  1.19  
#> 6     -3.10 0.258   0.133   0.824 -0.0693

我想把它变成一个带有平均值列的小标题,0.025 和 0.975 分位数。 对于quantile函数,这有效:

beta_df %>%
    map_dfr(quantile,0.025)

#> # A tibble: 5 × 1
#>    `2.5%`
#>     <dbl>
#> 1 -3.08  
#> 2  0.0311
#> 3 -0.194 
#> 4  0.829 
#> 5  0.0592

这让我得到了两个分位数

bind_cols(beta_df %>%
    map_dfr(quantile, 0.025),
    beta_df %>%
    map_dfr(quantile, 0.975))

#> # A tibble: 5 × 2
#>    `2.5%` `97.5%`
#>     <dbl>   <dbl>
#> 1 -3.08    -2.77 
#> 2  0.0311   0.255
#> 3 -0.194    0.699
#> 4  0.829    1.30 
#> 5  0.0592   2.07

但是对于mean

beta_df %>%
    map_dfr(mean)

#> # A tibble: 1 × 5
#>   intercept    B1    B2    B3    B4
#>       <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1     -2.93 0.124 0.156  1.08  1.14

给我一长排而不是一列。 如何将原始数据帧的每一列的平均值转换为标记为平均值的单列数据帧的一行?

原因是因为quantile()的输出是一个命名向量,而mean()只是一个值。

让我们创建一个自定义函数,其均值输出一个命名向量,

myMean <- function(x) {setNames(mean(x), nm = 'theMean')}

应用它使用map_dfr我们得到,

library(dplyr)

beta_df %>%
    purrr::map_dfr(myMean)

# A tibble: 5 x 1
  theMean
    <dbl>
1  -2.93 
2   0.124
3   0.156
4   1.08 
5   1.14 

暂无
暂无

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

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