gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:02:20 26 4
gpt4 key购买 nike

我有一个名为“dat”的数据集。

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

我想使用 R 代码创建变量“LOSER”。我试过这样

Loser <- NULL

for (i in 1: nrow(dat)){
if(match(dat$Team1[i],dat$Winner)==TRUE){
Loser[i] <- cricket$Team2[i]
}else if(match(dat$Team1[i],dat$Winner)==FALSE ){
Loser[i] <- dat$Team1[i]
}
}

但这并没有给出确切的结果。这段代码有什么问题?

期望输出:

TEAM1  TEAM2   WINNER LOSER 

A P A P
I S I S
P S S P
S I I S
S P P S
W P W P
A E A E
A S S A
E A E A

最佳答案

我们可以通过将“TEAM1”与“WINNER”列进行比较来获得所需的输出。向其加 1 以将“FALSE/TRUE”强制为“1/2”。这可以用作列索引。然后我们可以使用行号cbind并获取相应的元素来创建“LOSER”列

 dat$LOSER <- dat[cbind(1:nrow(dat), with(dat, TEAM1 == WINNER) + 1)]
dat$LOSER
#[1] "P" "S" "P" "S" "S" "P" "E" "A" "A"

注意:根据@David Arenburg 的评论修改。此外,在数据集中,第一列和第二列是“TEAM1”和“TEAM2”。如果我们有一个包含许多列的数据集,并且这些列不在第 1 和第 2 个位置,我们可以像我在评论中显示的那样将数据集子集化为只有两列

 dat$LOSER <- dat[paste0('TEAM', 1:2)][cbind(1:nrow(dat),
with(dat, TEAM1==WINNER)+1L)]

使用 data.table 的另一个选项。对于 TEAM1==WINNER 中的 TRUE 值,我们将 (:=) 'LOSER' 指定为 'TEAM2'。然后,我们将“LOSER”中的 NA 值替换为“TEAM1”

  library(data.table)
setDT(dat)[TEAM1==WINNER, LOSER:= TEAM2][is.na(LOSER), LOSER:= TEAM1]
dat

数据

 dat <- structure(list(TEAM1 = c("A", "I", "P", "S", "S", "W", "A", "A", 
"E"), TEAM2 = c("P", "S", "S", "I", "P", "P", "E", "S", "A"),
WINNER = c("A", "I", "S", "I", "P", "W", "A", "S", "E")),
.Names = c("TEAM1",
"TEAM2", "WINNER"), class = "data.frame", row.names = c(NA, -9L))

关于r - 在多个变量 R 代码上创建新的变量条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31921630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com