我有一个带有匹配信息的数据框(团队,对手),以及该游戏在不同体育博彩中的下注分布。每个团队我都有一行,因此每场比赛都有两行。例如,请参见下面的数据框:
example <- data.frame(Team = c("Tennessee","Vanderbilt"),
Opponent = c("Vanderbilt","Tennessee"),
PointsBet = c(-13, 13),
DraftKings = c(-12.5, 12.5))
Team Opponent PointsBet DraftKings
1 Tennessee Vanderbilt -13 -12.5
2 Vanderbilt Tennessee 13 12.5
我要做的是创建“ Opponent_PointsBet”和“ Opponent_DraftKings”列。因此,对于每一行,我们不仅有团队的下注分布,而且还有对手的下注分布。在这样的小示例中,手动执行操作很容易,但是我的实际数据集包含数百行和大约25列其他列,我想复制其中的每一列。
是否可以为特定的“团队”获取一行数据,并将这些列作为该团队被标识为“对手”的数据行中的新列?我的输出看起来像这样:
Team Opponent PointsBet DraftKings Opp_PointsBet Opp_DraftKings
1 Tennessee Vanderbilt -13 -12.5 13 12.5
2 Vanderbilt Tennessee 13 12.5 -13 -12.5
还有一点要注意,我要复制的列并不总是相反的,所以我不能简单地将值乘以-1来获得Opp_列。
答案 0 :(得分:1)
我们可以在base R
中创建两列。创建一个位置索引以使“团队”与“对手”匹配,并使用该索引重新排列“ PointsBet”和“ DraftKings”中的列值以创建新列
nm1 <- names(example)[3:4]
i1 <- with(example,match(Team, Opponent))
example[paste0("Opp_", nm1)] <- lapply(example[nm1], function(x) x[i1])
example
# Team Opponent PointsBet DraftKings Opp_PointsBet Opp_DraftKings
#1 Tennessee Vanderbilt -13 -12.5 13 12.5
#2 Vanderbilt Tennessee 13 12.5 -13 -12.5