在多个变量R代码上创建新的变量条件

时间:2015-08-10 14:01:38

标签: r variables

我有一个名为" 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

2 个答案:

答案 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