dplyr迭代分位数的所有列

dplyr迭代分位数的所有列,r,dplyr,R,Dplyr,我有以下R数据帧: x y z 1 -0.5242428 598.7092 1099.503 2 -0.4303593 599.2725 1100.970 3 0.1151290 599.9294 1100.062 4 0.5442775 600.9277 1098.690 5 1.4880749 599.9780 1098.479 6 0.2283675 600.3660 1099.128 我想得到每列的分位数,我认为dplyr是一个

我有以下R数据帧:

           x        y        z
1 -0.5242428 598.7092 1099.503
2 -0.4303593 599.2725 1100.970
3  0.1151290 599.9294 1100.062
4  0.5442775 600.9277 1098.690
5  1.4880749 599.9780 1098.479
6  0.2283675 600.3660 1099.128
我想得到每列的分位数,我认为
dplyr
是一个优雅的解决方案。下面的路由需要指定每个列,但这并不优雅

> df %>% summarise(`25%`=quantile(x, probs=0.25),
+                  `50%`=quantile(x, probs=0.5),
+                  `75%`=quantile(x, probs=0.75))
我还试图看看是否可以使用休耕:

df %>% mutate(quantile(., probs = c(0, 0.25, 0.5, 0.75, 1)))
我假设使用
会告诉函数对所有列执行此操作,但我得到了错误

错误:选择了未定义的列

最好的解决方案是什么

var        25%       50%       75%
x    -0.587382 0.1546231 0.9864742
y     599.2584 599.9998 600.6679
z      1099.31 1100.028 1100.704
我们可以试试

library(tidyverse)
df %>%
    summarise_all(funs(list(quantile(., probs = c(0.25, 0.5, 0.75))))) %>%
    unnest %>%
    transpose %>%
    setNames(., c('25%', '50%', '75%')) %>%
    map_df(unlist) %>%
    bind_cols(data.frame(vars = names(df)), .)

我们对dplyr太过努力了<代码>sapply(df,函数(x)分位数(x,c(0.25,0.5,0.75))%>%t或使用
sapply(df,分位数,probs=c(0.25,0.5,0.75))
稍微短一点。是的,你是正确的。这样好多了