这是我的尝试。我最初使用melt() 以长格式输出数据。然后,我在group_by() 中创建了一个组变量。然后,我使用value更改了每对的顺序,也就是比赛中的分数。在mutate() 中,当两个值(两个分数)相等时,我分配了“tie”。否则,我将“赢”和“输”分配给每一对,因为赢家排在第一位。如果您想要宽格式,可以使用dcast()。
mydf <- data.frame(round = c("A1", "A1", "A2", "A2"),
team = c("Lincoln", "Jefferson", "Washington", "Adams"),
match1 = c(3, 2, 5, 0),
match2 = c(1, 1, 3, 1),
match3 = c(2, 4, 4, 3),
stringsAsFactors = FALSE)
melt(mydf, id.vars = c("round", "team"), variable.name = "match") %>%
group_by(round, match) %>%
arrange(desc(value)) %>%
mutate(result = { if(value[1] == value[2]){"ties"}else{
c("win", "lose")}
})
# round team match value result
# 1 A1 Lincoln match1 3 win
# 2 A1 Jefferson match1 2 lose
# 3 A1 Lincoln match2 1 ties
# 4 A1 Jefferson match2 1 ties
# 5 A1 Jefferson match3 4 win
# 6 A1 Lincoln match3 2 lose
# 7 A2 Washington match1 5 win
# 8 A2 Adams match1 0 lose
# 9 A2 Washington match2 3 win
# 10 A2 Adams match2 1 lose
# 11 A2 Washington match3 4 win
# 12 A2 Adams match3 3 lose