2016-09-23 37 views
5

我已數據集象下面這樣:透視表tidyr`

> head(worldcup) 
       Team Position Time Shots Passes Tackles Saves 
Abdoun  Algeria Midfielder 16  0  6  0  0 
Abe   Japan Midfielder 351  0 101  14  0 
Abidal  France Defender 180  0  91  6  0 
Abou Diaby France Midfielder 270  1 111  5  0 
Aboubakar Cameroon Forward 46  2  16  0  0 
Abreu  Uruguay Forward 72  0  15  0  0 

然後有某些變量的碼計數平均值:

wc_3 <- worldcup %>% 
    select(Time, Passes, Tackles, Saves) %>% 
    summarize(Time = mean(Time), 
      Passes = mean(Passes), 
      Tackles = mean(Tackles), 
      Saves = mean(Saves)) 

和輸出是:

> wc_3 
     Time Passes Tackles  Saves 
1 208.8639 84.52101 4.191597 0.6672269 

然後我需要執行一個輸出象下面這樣:

 var   mean 
    Time 208.8638655 
    Passes  84.5210084 
    Tackles  4.1915966 
    Saves  0.6672269 

我試着這樣做:

wc_3 <- worldcup %>% 
    select(Time, Passes, Tackles, Saves) %>% 
    summarize(Time = mean(Time), 
      Passes = mean(Passes), 
      Tackles = mean(Tackles), 
      Saves = mean(Saves)) %>% 
    gather(var, mean, Time:Saves, factor_key=TRUE) 

輸出是一樣的。我的問題:有沒有辦法以不同的方式執行相同的輸出?

這是我的課程,但我的提交被拒絕。我不知道爲什麼,但我已經問過這個問題。

請告知

+0

哼了tibbles轉置功能,可以很好(有嗎?),比如'wc_3%>%T%>%as.data.frame%>%tibble :: rownames_to_column ()%>%setNames(c(「var」,「mean」))'。 – lukeA

回答

8

一種選擇將是gather第一,集團通過「無功」和summarise獲得「瓦爾」

library(dplyr) 
library(tidyr) 
worldcup %>% 
     gather(Var, Val, Time:Saves) %>% 
     filter(Var!= "Shots") %>% 
     group_by(Var) %>% 
     summarise(Mean = mean(Val)) 
+0

爲什麼要過濾「Var!=」Saves「'? – yeedle

+0

@AbeNewwirth謝謝你的評論。我實際上是想刪除'Shots',因爲它不在預期的輸出中 – akrun

0

另一種選擇是轉你的輸出wc_3,的mean作爲如下:

result <- as.data.frame(t(w_c))

設置你的 「的意思是」 變量名:

names(result)[1] <- "mean"

從wc_3列的名字已經成爲「結果」 rownames,所以我們需要把這些作爲列「VAR」的值:

result$var <- rownames(result)

設置在我們的 '結果' 表rownames爲NULL:

rownames(result) <- NULL

交匯處ORD列ER:

result <- result[,c(2,1)]