数据R的不同子集上的循环方程

时间:2018-09-07 10:50:29

标签: r loops subset

我正在尝试在某些数据上建立收入模式。我通过创建一个'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

1 个答案:

答案 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。