2017-04-12 69 views
2

所有列: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))) 

我认为使用.会告诉函数做所有列,但我得到的错误。

Error: undefined columns selected

最新最好的解决方案,使

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 
+8

我们正在与dplyr想办法太硬; (df,函数(x)分位数(x,c(0.25,0.5,0.75)))%>%t' – Vlo

+4

或者与sapply(df,quantile,probs = c(0.25,0.5,0.75 ))'。 – lmo

+0

你是对的。这要好得多 –

回答

4

我们可以尝试

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)), .)