2016-09-23 22 views
5

Tôi đã tập dữ liệu như dưới đây:bảng Pivot trên R sử dụng `dplyr` hoặc` 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 

Sau đó, có một ý nghĩa số quy tắc ứng biến nhất định:

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

và đầu ra là:

> wc_3 
     Time Passes Tackles  Saves 
1 208.8639 84.52101 4.191597 0.6672269 

sau đó, tôi cần phải thực hiện một đầu ra như dưới đây:

 var   mean 
    Time 208.8638655 
    Passes  84.5210084 
    Tackles  4.1915966 
    Saves  0.6672269 

Tôi cố gắng để làm như thế này:

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) 

Đầu ra là như vậy. Câu hỏi của tôi: là có anyway để thực hiện cùng một đầu ra với cách khác nhau?

Đây là khóa học của tôi nhưng nội dung gửi của tôi đã bị từ chối. Tôi không biết tại sao nhưng tôi đã hỏi về điều này.

Xin cho biết

+0

Hm một chức năng transpose cho tibbles có thể được tốt đẹp (là có một?), như 'wc_3%>% t%>% as.data.frame%>% tibble :: rownames_to_column()%>% setNames (c ("var", "mean")) '. – lukeA

Trả lời

8

Một lựa chọn sẽ là gather đầu tiên, nhóm của 'Var' và summarise để có được những mean của 'Val'

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

Tại sao bạn lọc 'Var! =" Saves "'? – yeedle

+0

@AbeNeuwirth Cảm ơn bạn đã bình luận. Tôi thực sự có nghĩa là để loại bỏ 'Shots' vì nó không có trong sản lượng dự kiến – akrun

0

lựa chọn khác là transpose wc_3 đầu ra của bạn, như sau:

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

Đặt tên biến "trung bình":

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

Tên của các cột từ wc_3 đã trở thành rownames trong 'kết quả', vì vậy chúng ta cần phải có được những như các giá trị của cột "var":

result$var <- rownames(result)

Đặt rownames trong bảng 'kết quả' của chúng tôi là NULL:

rownames(result) <- NULL

Trao đổi thứ tự er của cột:

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

Các vấn đề liên quan