我正在尝试在某些数据上建立收入模式。我通过创建一个'Earned_Multiplier'变量来做到这一点,然后可以用它在以后需要的任何其他变量上相乘。如果'Earned_Duration'> 0且<= 30,则Earned_Multiplier应等于((Earned_Duration / 30)* 0.347),其中'Earned_Duration'> 30且<= 60,则Earned_Multiplier应等于(0.347 +(((Earned_Duration / 30)* 0.16)),依此类推。
鉴于上述说明,我希望以下内容有意义。不幸的是,我收到错误消息“在下标的作业中不允许使用NA”。我觉得这很可能是因为我需要使用循环来进行计算?
有人可以指导我如何构建此循环,并确保对每个不同的子集进行正确的计算吗?
Output_All$Earned_Multiplier <- 1
Output_All$Earned_Multiplier[Output_All$Earned_Duration == 0] <- 0
Output_All$Earned_Multiplier[(Output_All$Earned_Duration > 0) &
(Output_All$Earned_Duration <= 30)] <- 0+
((Output_All$Earned_Duration/30)*.347) # Month 1
Output_All$Earned_Multiplier[(Output_All$Earned_Duration > 30) &
(Output_All$Earned_Duration <= 60)] <- .347+(((Output_All$Earned_Duration-
30)/30)*.16) # Month 2
Output_All$Earned_Multiplier[(Output_All$Earned_Duration > 60) &
(Output_All$Earned_Duration <= 90)] <- .507+(((Output_All$Earned_Duration-
60)/30)*.085) # Month 3
答案 0 :(得分:1)
提供一个虚拟数据集将很有帮助,因此我们可以进行处理。您的数据集中可能有一些NA导致该错误。
无论如何,使用dplyr库,您都可以执行ifelse
语句和mutate
来创建带有计算结果的新列:
library(dplyr)
Output_All <- Output_All %>% mutate(Earned_Multiplier = ifelse(Earned_Duration == 0, 0,
ifelse(Earned_Duration>0&Earned_Duration<=30, (Earned_Duration/30)*0.347,
ifelse(Earned_Duration>30&Earned_Duration<=60, (0.347+((Earned_Duration/30)*0.16)), #close with final else here, if none of the above is met
))))# or continue with more ifelse statements
关于NA:
如果您确实有NA,并且它们导致了您的麻烦,则可以根据自己的喜好将其作为逻辑语句的一部分:
!is.na(Earned_Duration) # dont forget to add & if you add it as a condition
以确保不考虑NA。