比 r 中的 ifelse() 更快的函数

多姆乔

我有 3 列Flag, Score, Stage

Flag 的值将是 1 或 0,Score 将是任何大于 0 的值。我们需要计算 stage 值。

所以我们的数据 (stagedata) 将如下所示:

              Flag Score Stage
               1    35
               1    0
               0    12
               ....

IF Flag == 1 and score >= 30, 我们计算阶段为2,

如果 Flag ==0 或 Flag == 1 并且 score < 30,stage = 1。

任何其他案例阶段都将计算为 0(即,由于输入中的某些错误或如果分数或标志丢失)。

        stagedata$Stage <- ifelse(stagedata$Flag==1,ifelse((stagedata$Score>=30),2,1),ifelse(stagedata$Flag==0,1,0))
        stagedata$Stage[is.na(stagedata$Stage)] <-0

有没有更有效的方法来使用任何其他功能(如应用)来做到这一点?我们正在处理的数据是一万个数量级

阿克伦

我们可以通过一些算术运算将逻辑向量转换为整数

v1 <- with(stagedata, 2 *(Flag == 1 & score >= 30) + (Flag %in% 0:1 & score <30))
v1
#[1] 2 1 1 2 1 0

如果有 NA 值,则将其替换为 0

v1[is.na(v1)] <- 0

数据

stagedata <- data.frame(Flag = c(1, 1, 0, 1, 0, 2), score = c(35, 0, 12, 31, 27, 31))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章