Looped Equation для другого подмножества данных R - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь настроить схему заработка на некоторых данных. Я делаю это, создавая переменную 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)) и т. Д. </p>

Я надеюсь, что приведенное ниже описание должно иметь смысл К сожалению, я получаю сообщение об ошибке "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 голосов
/ 07 сентября 2018

Было бы полезно предоставить фиктивный набор данных, чтобы мы могли поработать над этим. Возможно, в вашем наборе данных есть несколько 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, и они вызывают у вас проблемы, в зависимости от ваших предпочтений, вы можете включить это как часть своих логических утверждений:

!is.na(Earned_Duration) # dont forget to add & if you add it as a condition

, чтобы удостовериться, что NA игнорируются.

...