我有一个大学橄榄球数据的R data.frame,每个游戏有两个条目(每个团队一个,有统计数据和诸如此类的东西)。我想比较这些点来创建一个二进制的Win / Loss变量,但我不知道如何(我对R不是很有经验)。 有没有办法我可以遍历列并尝试将它们与另一列匹配(我有一个游戏ID变量,所以我匹配)并通过比较点值创建上述二进制Win / Loss变量?
摘录数据框(遗漏了许多变量):
Team Code Name Game Code Date Site Points
5 Akron 5050320051201 12/1/2005 NEUTRAL 32
5 Akron 404000520051226 12/26/2005 NEUTRAL 23
8 Alabama 419000820050903 9/3/2005 TEAM 37
8 Alabama 664000820050910 9/10/2005 TEAM 43
我想要的是附加一个新列,一个二进制变量,根据团队赢或输的情况分配1或0。为了解决这个问题,我需要拿游戏代码,比如5050320051201,找到具有相同游戏代码的另一行(那个游戏代码只有另外一行,对于该游戏中的其他团队),并比较两者的分值,并使用它为Win / Loss变量分配1或0。
答案 0 :(得分:1)
假设您的数据每个唯一Game Code
只有两个团队,并且没有以下示例给出的平局游戏:
df <- structure(list(`Team Code` = c(5L, 6L, 5L, 5L, 8L, 9L, 9L, 8L
), Name = c("Akron", "St. Joseph", "Akron", "Miami(Ohio)", "Alabama",
"Florida", "Tennessee", "Alabama"), `Game Code` = structure(c(1L,
1L, 2L, 2L, 3L, 3L, 4L, 4L), .Label = c("5050320051201", "404000520051226",
"419000820050903", "664000820050910"), class = "factor"), Date = structure(c(13118,
13118, 13143, 13143, 13029, 13029, 13036, 13036), class = "Date"),
Site = c("NEUTRAL", "NEUTRAL", "NEUTRAL", "NEUTRAL", "TEAM",
"AWAY", "AWAY", "TEAM"), Points = c(32L, 25L, 23L, 42L, 37L,
45L, 42L, 43L)), .Names = c("Team Code", "Name", "Game Code",
"Date", "Site", "Points"), row.names = c(NA, -8L), class = "data.frame")
print(df)
## Team Code Name Game Code Date Site Points
##1 5 Akron 5050320051201 2005-12-01 NEUTRAL 32
##2 6 St. Joseph 5050320051201 2005-12-01 NEUTRAL 25
##3 5 Akron 404000520051226 2005-12-26 NEUTRAL 23
##4 5 Miami(Ohio) 404000520051226 2005-12-26 NEUTRAL 42
##5 8 Alabama 419000820050903 2005-09-03 TEAM 37
##6 9 Florida 419000820050903 2005-09-03 AWAY 45
##7 9 Tennessee 664000820050910 2005-09-10 AWAY 42
##8 8 Alabama 664000820050910 2005-09-10 TEAM 43
您可以使用dplyr
生成您想要的内容:
library(dplyr)
result <- df %>% group_by(`Game Code`) %>%
mutate(`Win/Loss`=if(first(Points) > last(Points)) as.integer(c(1,0)) else as.integer(c(0,1)))
print(result)
##Source: local data frame [8 x 7]
##Groups: Game Code [4]
##
## Team Code Name Game Code Date Site Points Win/Loss
## <int> <chr> <fctr> <date> <chr> <int> <int>
##1 5 Akron 5050320051201 2005-12-01 NEUTRAL 32 1
##2 6 St. Joseph 5050320051201 2005-12-01 NEUTRAL 25 0
##3 5 Akron 404000520051226 2005-12-26 NEUTRAL 23 0
##4 5 Miami(Ohio) 404000520051226 2005-12-26 NEUTRAL 42 1
##5 8 Alabama 419000820050903 2005-09-03 TEAM 37 0
##6 9 Florida 419000820050903 2005-09-03 AWAY 45 1
##7 9 Tennessee 664000820050910 2005-09-10 AWAY 42 0
##8 8 Alabama 664000820050910 2005-09-10 TEAM 43 1
在此,我们先group_by
Game Code
,然后使用mutate
为每个组创建Win/Loss
列。这里的逻辑很简单,如果first
Points
大于last
(假设只有两个),那么我们将列设置为c(1,0)
。否则,我们将其设置为(0,1)
。请注意,此逻辑不处理关系,但可以轻松扩展以执行此操作。另请注意,由于空格和/
等特殊字符,我们使用反引号括起列名称。
答案 1 :(得分:0)
footballdata $ SomeVariable [footballdata $ Wins ==&#34; 1&#34;] = stuff
通过1或0调用你的胜利,因此二项式
R的数据框很好,因为你可以聚合你想要的东西,我只希望带有胜利的数据帧是1.然后你可以将数据设置为某个变量,如上所述。如果您想要另一个数据框来填充数据框,请确保它们具有相同数量的数据。
footballdata $ SomeVariable [footballdata $ Wins ==&#34; 1&#34;] [footballdata $ Team ==&#34; Browns&#34;] = Hopeful