我有 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/