我有一个名为" dat"的数据集。
int
我想创建变量" LOSER"使用R代码。我试过这样的
row = ','.join([str(dict1.get(c + str(r), '')) for c in cols])
但这并没有给出确切的结果。这段代码有什么问题?
渴望出局:
TEAM1 TEAM2 WINNER
A P A
I S I
P S S
S I I
S P P
W P W
A E A
A S S
E A E
答案 0 :(得分:4)
我们可以通过比较'TEAM1'和'WINNER'列来获得所需的输出。添加1以强制'FALSE / TRUE'变为'1/2'。这可以用作列索引。然后,我们可以dev
使用行号并获取相应的元素来创建“LOSER”列
cbind
注意:根据@David Arenburg的评论修改。此外,在数据集中,第1列和第2列是“TEAM1”和“TEAM2”。如果我们有一个包含许多列的数据集,并且这些数据集不在第一和第二位置,我们可以按照我在评论中显示的数据集进行子集化,只有两列
dat$LOSER <- dat[cbind(1:nrow(dat), with(dat, TEAM1 == WINNER) + 1)]
dat$LOSER
#[1] "P" "S" "P" "S" "S" "P" "E" "A" "A"
使用 dat$LOSER <- dat[paste0('TEAM', 1:2)][cbind(1:nrow(dat),
with(dat, TEAM1==WINNER)+1L)]
的另一个选项。对于data.table
中的TRUE值,我们将(TEAM1==WINNER
)'LOSER'指定为'TEAM2'。然后,我们将'LOSER'中的:=
值替换为'TEAM1'
NA
library(data.table)
setDT(dat)[TEAM1==WINNER, LOSER:= TEAM2][is.na(LOSER), LOSER:= TEAM1]
dat
答案 1 :(得分:2)
我无法抗拒写dplyr
方式。
library(dplyr)
dat %>%
mutate(LOSER = ifelse(TEAM1 == WINNER, TEAM2, TEAM1))
TEAM1 TEAM2 WINNER LOSER
1 A P A P
2 I S I S
3 P S S P
4 S I I S
5 S P P S
6 W P W P
7 A E A E
8 A S S A
9 E A E A