R 如何获得tibble中每个前5%步骤的平均值?

R 如何获得tibble中每个前5%步骤的平均值?,r,dplyr,tidyverse,tibble,R,Dplyr,Tidyverse,Tibble,例如: data <- mtcars %>% select(wt, mpg, disp) 需要一个更整洁的解决方案,可能不使用for 您可以使用cut定义哪些行属于disp的5%频带: mtcars%>% 选择(重量、mpg、显示)%>% 变异(dispcut=cut(disp,c(-Inf,分位数(disp,seq(0,1,len=21))[-1]),labels=FALSE))%>% 分组依据(显示)%>% 总结所有(~mean() ##tibble:17 x 4 #显示wt

例如:

data <- mtcars %>% select(wt, mpg, disp)
需要一个更整洁的解决方案,可能不使用
for


您可以使用
cut
定义哪些行属于
disp
的5%频带:

mtcars%>%
选择(重量、mpg、显示)%>%
变异(dispcut=cut(disp,c(-Inf,分位数(disp,seq(0,1,len=21))[-1]),labels=FALSE))%>%
分组依据(显示)%>%
总结所有(~mean()
##tibble:17 x 4
#显示wt mpg显示
#         
#  1       1  1.72  32.2  73.4
#  2       2  2.07  29.8  78.8
#  3       3  1.51  30.4  95.1
#  4       4  2.39  22.2 114. 
#  5       5  2.14  26   120. 
#  6       6  2.96  22.1 131. 
#  7       7  2.77  19.7 145  
#  8       8  2.90  22.1 156. 
#  9      10  3.44  18.5 168. 
# 10      11  3.34  19.8 242. 
# 11      12  3.86  16.3 276. 
# 12      14  3.57  15   301  
# 13      15  3.48  15.4 311  
# 14      16  3.84  13.3 350  
# 15      17  3.39  16.3 357  
# 16      19  4.60  17.0 420  
# 17      20  5.34  10.4 466  

我们使用
imap\u dfr
函数(来自tidyverse
purr
包)循环通过每个
disp
百分位数限制(我们使用
分位数
函数计算),计算所需的平均值,并返回一个包含结果的数据帧

library(tidyverse)

quantile(mtcars$disp, seq(0,0.95,0.05)) %>% 
  imap_dfr(
    ~bind_cols(
      disp.min.percentile=.y,
      disp.min=.x, 
      mtcars %>% 
        select(disp, wt, mpg) %>% 
        filter(disp >= .x) %>% 
        mutate(n = n()) %>% 
        group_by(n) %>% 
        summarise_all(list(mean=mean)) %>% 
        ungroup()
    )) %>% 
  arrange(desc(disp.min))

你的意思是
mtcars%>%分组依据(分组=findInterval(disp,分位数(disp,seq(0.05,1,0.05)))%>%汇总依据(vars(wt,mpg,disp),平均值)
library(tidyverse)

quantile(mtcars$disp, seq(0,0.95,0.05)) %>% 
  imap_dfr(
    ~bind_cols(
      disp.min.percentile=.y,
      disp.min=.x, 
      mtcars %>% 
        select(disp, wt, mpg) %>% 
        filter(disp >= .x) %>% 
        mutate(n = n()) %>% 
        group_by(n) %>% 
        summarise_all(list(mean=mean)) %>% 
        ungroup()
    )) %>% 
  arrange(desc(disp.min))
   disp.min.percentile disp.min     n disp_mean wt_mean mpg_mean
 1 95%                    449       2      466     5.34     10.4
 2 90%                    396.      4      443     4.97     13.7
 3 85%                    360       6      415.    4.48     14.6
 4 80%                    351.      7      406.    4.29     14.8
 5 75%                    326       8      399.    4.24     14.6
 6 70%                    303.     10      382.    4.08     14.8
 7 65%                    280.     11      374.    4.04     14.8
 8 60%                    276.     14      353.    4.00     15.1
 9 55%                    259.     14      353.    4.00     15.1
10 50%                    196.     16      339.    3.92     15.7
11 45%                    167.     18      320.    3.86     16.0
12 40%                    160      20      304.    3.75     16.5
13 35%                    146.     21      297.    3.73     16.9
14 30%                    142.     22      290.    3.68     17  
15 25%                    121.     24      276.    3.62     17.4
16 20%                    120.     25      270.    3.56     17.8
17 15%                    103.     27      259.    3.48     18.1
18 10%                     80.6    28      253.    3.41     18.5
19 5%                      77.4    30      241.    3.32     19.3
20 0%                      71.1    32      231.    3.22     20.1