我想计算下面的tibble的百分位...
我在3个变量的每一个中都有10个观测值的非零子集,即......
n <- 10
tibb <- tibble(
x = 1:5,
y = 1,
z = x ^ 2 + y)
(排除的观察结果全部为零)
因此,平均值是字段/ 10的总和(而不是/ 5):
meantibb <- tibb %>% group_by() %>%
summarise_if(is.numeric, sum, na.rm = TRUE) / n
meantibb
如何获得x,y和z中的以下百分位数?
perciles <- c(0.5, 0.75)
percentiles <- function(p) quantile(p, perciles)
谢谢
你很接近,如果先使用聚集然后按三个不同因素对数据进行分组,那么创建均值(以及随后的百分位数)的方法可能会更简单。
library(dplyr)
n <- 10
tibb <- tibble(x = 1:5, y = 1, z = x ^ 2 + y)
tibb %>%
gather("fctr", "value") %>%
group_by(fctr) %>%
summarise(mean = sum(value) / n,
perc_50 = quantile(value, 0.5),
perc_75 = quantile(value, 0.75))
但是,我不确定您是否需要非零子集或整个数据集的百分位数,因为这会改变您的结果,即
> x = 1:5
> quantile(x, 0.1)
10%
1.4
> test <- c(0,0,0,0,0,1,2,3,4,5)
> quantile(test, 0.1)
10%
0
您可以创建包含零的数据集
missingRowCount <- n - nrow(tibb)
colCount <- ncol(tibb)
zeroTibb <- matrix(rep(0, missingRowCount * colCount), ncol = colCount, nrow = missingRowCount) %>% as.tibble()
colnames(zeroTibb) <- colnames(tibb)
allTibb <- dplyr::bind_rows(tibb, zeroTibb)
获得完整数据后,您可以运行以下内容以获得百分位数
percTibble = sapply(allTibb, percentiles) %>%
as.tibble()
这里的假设是,当包含零时,数据不会太大。