1

我有一个足球队数据集及其 2009-2017 年的输赢结果。目前,赢和输在同一列中,一个接一个,我想为损失创建一个新列。

数据样本如下所示:

Football <- data.frame (
    Season = rep ("2009", 10),
    Team = rep (c("ARI", "ARI", "ATL", "ATL", "BAL", "BAL", "BUF", "BUF", "CAR", "CAR")),
    Value = c(10, 6, 7, 9, 7, 9, 6, 10, 8, 8)
)

我希望最终输出显示:

Season    Team    Wins    Losses
2009      ARI     10      6
2009      ATL     7       9
2009      BAL     7       9

等等。还有其他几个变量,但每个赛季/团队对的唯一变化是“价值”。

我已经尝试了 spread() 和 mutate() 的几次迭代,但它们通常比我想要的要多得多的列(即 2009.Wins、2009.Losses、2010.Wins、2010.Losses)。

谢谢你的帮助。我希望这篇文章能顺利,这是我第一次发帖。

干杯,杰里米

4

2 回答 2

1

我们创建一列“Winloss”,然后创建spread“宽”格式

library(tidyverse)
Football %>%
  mutate(Winloss = rep(c("Win", "Loss"), n()/2)) %>%
  spread(Winloss, Value)
#   Season Team Loss Win
#1   2009  ARI    6  10
#2   2009  ATL    9   7
#3   2009  BAL    9   7
#4   2009  BUF   10   6
#5   2009  CAR    8   8

数据

Football <- data.frame (
  Season = rep ("2009", 10),
  Team = rep (c("ARI", "ARI", "ATL", "ATL", "BAL", "BAL", "BUF", "BUF", "CAR", "CAR")),
  Value = c(10, 6, 7, 9, 7, 9, 6, 10, 8, 8)
)
于 2018-04-12T17:09:57.220 回答
0

使用reshape2

> Football$WL <- rep(c("Win", "Losses"), nrow(Football)/2)
> 
> library(reshape2)
> dcast(Football, Season + Team ~ WL, value.var="Value")
  Season Team Losses Win
1   2009  ARI      6  10
2   2009  ATL      9   7
3   2009  BAL      9   7
4   2009  BUF     10   6
5   2009  CAR      8   8
于 2018-04-12T17:26:05.383 回答