2016-07-04 51 views
5

考慮下面的示例數據拆分使用dplyr(或其他方式)

library(dplyr) 
tmp <- mtcars %>% 
    group_by(cyl) %>% 
    summarise(mpg_sum = list(summary(mpg))) 

使得mpg_sum包含分含有列表分爲多個列的數據幀列中,第一四分位數,中值,平均值,第三四分位,和變量mpg的變量最大值爲cyl

如何使用dplyr將此列解壓至6列,列名適當,否則?

+4

你也可以使用'庫(掃帚); mtcars%>%group_by(cyl)%>%do(tidy(summary(。$ mpg)))' –

+0

請問您可以將此作爲答案。我總是對掃帚感興趣。 – Alex

+2

主題變化:'mtcars%>% group_by(cyl)%>%summarize(summary = list(broom :: tidy(summary(mpg))))%>%tidyr :: unnest()' – alistaire

回答

12

我們可以使用data.table。轉換 'data.frame' 到 'data.table'(as.data.table(mtcars)),通過「共青團分組,我們得到 '英里' 的summary並將其轉換爲list

library(data.table) 
as.data.table(mtcars)[, as.list(summary(mpg)), by = cyl] 
# cyl Min. 1st Qu. Median Mean 3rd Qu. Max. 
#1: 6 17.8 18.65 19.7 19.74 21.00 21.4 
#2: 4 21.4 22.80 26.0 26.66 30.40 33.9 
#3: 8 10.4 14.40 15.2 15.10 16.25 19.2 

或者使用dplyr,在'cyl'分組後,我們使用do進行與上面相同的操作。

library(dplyr) 
mtcars %>% 
    group_by(cyl) %>% 
    do(data.frame(as.list(summary(.$mpg)), check.names=FALSE)) 
# cyl Min. 1st Qu. Median Mean 3rd Qu. Max. 
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 
#1  4 21.4 22.80 26.0 26.66 30.40 33.9 
#2  6 17.8 18.65 19.7 19.74 21.00 21.4 
#3  8 10.4 14.40 15.2 15.10 16.25 19.2 

或者用purrr

library(purrr) 
mtcars %>% 
    slice_rows("cyl") %>% 
    select(mpg) %>% 
    by_slice(dmap, summary, .collate= "cols") 
+3

這看起來非常好...從'data.table'的自動命名好得多,因爲你不必指定check.names – Alex

+0

,所以在'dplyr :: do'中有問題它意味着它會刪除除分組之外的所有列。例如,'mtcars%>%group_by(cyl)%>%mutate(mpg_sum = list(summary(mpg)))''。如果你解開這個列表,表格的其他列消失。 – Alex

+0

它看起來像'data.table'提供了'dplyr'不能的解決方案,因爲您可以很容易地將一個函數調用的多個輸出分配給多個命名列。 – Alex

4

(或其他方式)選項使用sapply()

t(sapply(split(mtcars$mpg, mtcars$cyl), summary)) 
+5

或'do.call(rbind,by(mtcars $ mpg,mtcars $ cyl,FUN = summary)) ' – akrun

4

另一個選項

with(data = mtcars,by(mpg,cyl,FUN = summary)) 
9

至於評論,你也可以使用tidy功能從包broom

library(broom) 
mtcars %>% group_by(cyl) %>% do(tidy(summary(.$mpg))) 
# Source: local data frame [3 x 7] 
# Groups: cyl [3] 
# 
#  cyl minimum q1 median mean q3 maximum 
# (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) 
# 1  4 21.4 22.80 26.0 26.66 30.40 33.9 
# 2  6 17.8 18.65 19.7 19.74 21.00 21.4 
# 3  8 10.4 14.40 15.2 15.10 16.25 19.2 
相關問題