r - 使用 dplyr 从多列计算分位数

标签 r dplyr confidence-interval quantile

我有这样一个数据框

set.seed(123)

对于一个向量,如果我想生成均值,以及上下 95% CI,我可以这样做:

 x <- rnorm(20)

quantile(x, probs = 0.500) # mean
quantile(x, probs = 0.025) # lower 
quantile(x, probs = 0.975) # upper bound

我有一个数据框

df <- data.frame(loc = rep(1:2, each = 4), 
                 year = rep(1980:1983, times = 2),
                 x1 = rnorm(8), x2 = rnorm(8), x3 = rnorm(8), x4 = rnorm(8), 
                 x5 = rnorm(8), x6 = rnorm(8), x7 = rnorm(8), x8 = rnorm(8))

对于每个位置和年份,我想使用 x1 到 x8 找到中值、下限和上限。

df %>% group_by(loc, year) %>% 
dplyr::summarise(mean.x = quantile(x1, x2, x3, x4, x5, x6 , x7, x8, probs = 0.500),
                 lower.x = quantile(x1, x2, x3, x4, x5, x6 , x7, x8, probs = 0.025),
                 upper.x = quantile(x1, x2, x3, x4, x5, x6 , x7, x8, probs = 0.975))

但这给了我对所有人相同的答案。

# A tibble: 8 x 5
# Groups:   loc [?]
loc  year mean.x lower.x upper.x
<int> <int>  <dbl>   <dbl>   <dbl>
  1     1  1980 -1.07   -1.07   -1.07 
2     1  1981 -0.218  -0.218  -0.218
3     1  1982 -1.03   -1.03   -1.03 
4     1  1983 -0.729  -0.729  -0.729
5     2  1980 -0.625  -0.625  -0.625
6     2  1981 -1.69   -1.69   -1.69 
7     2  1982  0.838   0.838   0.838
8     2  1983  0.153   0.153   0.153

此外,有什么方法可以不通过 x1、x2...x8 来引用列,而是通过索引来做类似的事情

3:ncol(df)

最佳答案

您可能希望先将宽数据转换为长数据:

require(dplyr)
require(tidyr)
df %>% gather(xvar, value, x1:x8) %>% 
group_by(loc, year) %>% 
summarise(mean.x = quantile(value, probs = 0.50),
          lower.x = quantile(value, probs = 0.025),
          upper.x = quantile(value, probs = 0.975))

你得到:

# A tibble: 8 x 5
# Groups:   loc [?]
    loc  year  mean.x lower.x upper.x
  <int> <int>   <dbl>   <dbl>   <dbl>
1     1  1980  0.152   -0.982   2.08 
2     1  1981 -0.478   -1.33    0.825
3     1  1982 -0.0415  -1.95    1.02 
4     1  1983  0.855   -0.180   1.43 
5     2  1980  0.658   -1.24    2.23 
6     2  1981  0.196   -0.782   0.827
7     2  1982 -0.629   -0.937   0.285
8     2  1983 -0.0737  -0.744   1.27 

关于r - 使用 dplyr 从多列计算分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51287704/

相关文章:

r - 在 R : Error in is. data.frame(data) : object '' not found, C5.0 plot

r - 如何从 R 中的结构对象中提取数值

r - ggplot2 将两个数据集绘制成一张图片

r - dplyr:在group_by中生成行号/行位置

r - 图形最有用的输出格式是什么?

r - 如何在 R 中使用 str_pad 改变变量

r - 检查一系列日期是否在一系列不同的时间间隔内

python - 如何用置信区间解释数据点的上限/下限?

Scala 多元数组总和

python - 双曲 Curve_Fit 的预测区间 - SciPy