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

标签 r if-statement

我有 3 列旗帜、得分、阶段

Flag 的值为 1 或 0,Score 为任何大于 0 的值。我们需要计算阶段值。

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

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

如果 Flag == 1 且 Score >= 30,我们计算阶段为 2,

如果 Flag ==0 或 Flag == 1 并且分数 < 30,则阶段 = 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

是否有更有效的方法可以使用 apply 等其他函数来执行此操作?我们正在处理的数据量级为万个

最佳答案

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

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))

关于r - 比 r 中的 ifelse() 更快的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50016056/

相关文章:

C# if else vs if 或 vs switch case

r - 类似于 R 中的 Pandas Series.value_counts()?

r - 为负值和正值定义颜色渐变 scale_fill_gradientn()

RMarkdown xelatex !缺失和插入

r - 如何按行创建 R 数据框

c++ - if 语句的一个分支不能只是一个声明?

r - 如何减少 R "both"类型图中的线和点之间的填充

javascript - '===' 比 '!==' 更有效吗?

bash - shell 脚本中的单行 if 语句不起作用

python - 使用 pandas 按类别进行计算