如何获得data_frame的分位数?

How to get the quantile of a data_frame?

我写了一个函数

 rnormgamma <- function(n, mu, lambda, alpha, beta) {
   if (length(n) > 1) 
     n <- length(n)
  tau <- rgamma(n, alpha, beta)
  x <- rnorm(n, mu, sqrt(1/(lambda*tau)))
   data.frame(tau = tau, x = x)
  }

我得到 data.frame taubetaxtau 如果我抽样

  taubeta <- rnormgamma(10000, 0.3, 70000, 11, 600)

如果我想分别得到xtau的分位数。如何在 R 中编写此代码?

使用 dplyrsummariseacross 函数可以通过以下代码实现:

library(dplyr)

taubeta %>% summarise(across(everything(),quantile, probs=c(.025, .975) ))

## or with the summarise_all function
taubeta %>% summarise_all(quantile, probs=c(.025,.975) )

输出

          tau         x
1 0.009166053 0.2420291
2 0.030686640 0.3580429

您可以使用 sapply/lapply 获取每列的 quantile 个值。

sapply(taubeta, quantile)

#             tau         x
#0%   0.004187748 0.1376232
#25%  0.014378060 0.2805112
#50%  0.017700113 0.2994879
#75%  0.021724271 0.3187546
#100% 0.048315654 0.4180485

这是一个只需要“基础”R 包的解决方案(不需要库。

使用sapply对a的每一列应用一个函数data.frame和quantile计算实际的分位数:

sapply(taubeta, quantile)
#>              tau         x
#> 0%   0.004361796 0.1711136
#> 25%  0.014334854 0.2816301
#> 50%  0.017776155 0.3005732
#> 75%  0.021656277 0.3192821
#> 100% 0.051708122 0.4302409

您可以使用 probs 参数指定 哪个 分位数:

sapply(taubeta, quantile, probs=c(.5, .8))
#>            tau         x
#> 50% 0.01777528 0.2996857
#> 80% 0.02275949 0.3238543