另一种在R中进行数据透视表的方法

时间:2016-09-23 08:55:22

标签: r dplyr 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)

输出相同。我的问题是:无论如何以不同的方式执行相同的输出?

这是我的课程,但我的提交被拒绝了。我不知道为什么,但我问过这件事。

请告知

2 个答案:

答案 0 :(得分:8)

首先选择gather,然后按'Var'和summarise分组,以获得'Val'的mean

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

答案 1 :(得分:0)

另一种选择是转换输出wc_3,如下所示:

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

设置&#34;卑鄙&#34;的名称变量:

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

来自wc_3的列的名称已成为&#39; result&#39;中的rownames,因此我们需要将这些列作为列的值&#34; var&#34;:

result$var <- rownames(result)

在我们的&#39;结果&#39;中设置rownames table as NULL:

rownames(result) <- NULL

交换列的顺序:

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