2017-04-12 26 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)), .)