如何获得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 taubeta
的 x
和 tau
如果我抽样
taubeta <- rnormgamma(10000, 0.3, 70000, 11, 600)
如果我想分别得到x
和tau
的分位数。如何在 R 中编写此代码?
使用 dplyr
的 summarise
和 across
函数可以通过以下代码实现:
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
我写了一个函数
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 taubeta
的 x
和 tau
如果我抽样
taubeta <- rnormgamma(10000, 0.3, 70000, 11, 600)
如果我想分别得到x
和tau
的分位数。如何在 R 中编写此代码?
使用 dplyr
的 summarise
和 across
函数可以通过以下代码实现:
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