Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据其他行/列组合中包含的信息创建新列_R - Fatal编程技术网

R 根据其他行/列组合中包含的信息创建新列

R 根据其他行/列组合中包含的信息创建新列,r,R,我有一个包含比赛信息(球队、对手)的数据框,以及该游戏在不同体育书籍中的赌注分布。我为每支球队准备了一排,所以每场比赛将有两排。例如,请参见以下数据框: example <- data.frame(Team = c("Tennessee","Vanderbilt"), Opponent = c("Vanderbilt","Tennessee"), PointsBet = c(-13, 13),

我有一个包含比赛信息(球队、对手)的数据框,以及该游戏在不同体育书籍中的赌注分布。我为每支球队准备了一排,所以每场比赛将有两排。例如,请参见以下数据框:

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


还有一件事需要注意,我想复制的列并不总是相反的,所以我不能简单地将值乘以-1得到Opp_u.列。

我们可以在
base R
中创建两列。创建一个位置索引,将“团队”与“对手”匹配,并使用该索引重新排列“PointsSet”和“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

nm1真棒!这似乎很有效:)谢谢你帮我学习新东西!
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