gpt4 book ai didi

r - R 中嵌套的 ifelse 语句中缺少值

转载 作者:行者123 更新时间:2023-12-05 08:21:06 24 4
gpt4 key购买 nike

在某个时间点,我遇到了这个问题......并解决了它。但是,由于这是一个反复出现的问题,我现在忘记了解决方案,希望这个问题能为其他人和我提供澄清:)

我正在创建一个基于对几个问题的回答的变量。每个问题可以有三个值:1、2 或 NA。对于每个观察结果,1 和 2 是互斥的。

我只是想创建一个变量,它是每个人用“1”编码的选择的组合,并根据该代码为其赋值。

假设我有这个df:

ID   var1    var2   var3   var4
1 1 2 NA NA
2 NA NA 2 1
3 2 1 NA NA
4 2 NA 1 NA

然后我尝试根据以下语句重新编码:

df$var <- 
ifelse(
as.numeric(df$var1) == 1,
"Gut instinct",
ifelse(
as.numeric(df$var2) == 1,
"Data",
ifelse(
as.numeric(df$var3) == 1,
"Science",
ifelse(
as.numeric(df$var4) == 1,
"Philosophy",
NA
)
)
)
)

但是,这段代码只是部分基于“ifelse”的代码。例如,df$var 可能观察到“直觉”和“哲学”,但 var2var3==1 仍然是 NA。

关于为什么会发生这种情况有什么想法吗?

最佳答案

apply 更快的替代方案(使用@MrFlick 的数据):

vals <- c("Gut", "Data", "Science", "Phil")
intm <- dd[-1]==1 & !is.na(dd[-1])
dd$resp <- NA
dd$resp[row(intm)[intm]] <- vals[col(intm)[intm]]

快多少?在 100 万行上:

#row/col assignment
user system elapsed
0.99 0.02 1.02

#apply
user system elapsed
11.98 0.04 12.30

在相同的数据集上尝试时给出相同的结果:

identical(flick$resp,latemail$resp)
#[1] TRUE

关于r - R 中嵌套的 ifelse 语句中缺少值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23818814/

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