2016-02-29 55 views
1

是否有一種方法使用dplyr進行彙總,然後採用group_by()然後採用全局平均值,然後將其添加到同一個數據幀而不必創建第二個數據幀?group_by和單個dplyr管道內的全局平均值

現在我是這樣做的:

library(dplyr) 

speciesiris <- iris %>% 
    group_by(Species) %>% 
    summarise(mpw=mean(Petal.Width)) 

iris %>% 
    summarise(mpw=mean(Petal.Width)) %>% 
    mutate(Species="All Species") %>% 
    bind_rows(speciesiris) 

一個潛在的陷阱,這裏是我想不來的平均值,而是一個全球性的平均值或兩者的至少選項。那麼有沒有更好的方法來做到這一點希望所有在一個管道?

+0

嘗試'虹膜%>%選擇(Petal.Width,物種)%>%bind_rows(,data.frame(Petal.Width =平均值(。$ Petal.Width),Species =「所有種類」))%>%group_by(Species)%>%summarize(mpw = mean(Petal.Width))' – akrun

+2

您可以在第二個參數中擴展speciesiris變量聲明:'iris%>%summary(mpw = mean(Petal.Width))%> mutate(Species =「All Species」)%>%bind_rows(iris%>%group_by(Species)%>%summarize(mpw = mean(Petal.Width)))' – fishtank

+0

@fishtank哇管道內的管道。我從來沒有考慮過這樣的事情。有一些失敗的目的,使dplyr管道更具可讀性的代碼,但它當然有效。你想讓這個答案能讓我接受嗎? – boshek

回答

2

一號線做的一切(但不推薦):

iris %>% summarise(mpw=mean(Petal.Width))  # Global mean 
    %>% mutate(Species="All Species") 
    %>% bind_rows(
      iris %>% group_by(Species)   # Mean by Species 
       %>% summarise(mpw=mean(Petal.Width)) 
       )