mercredi 3 avril 2019

How to create a new variable and then, change it with multiple conditions?

Good Afternoon,

I'm creating a function with several conditions and now, I want to mutate several variables based on them.

Originally, I used to do everything in SPSS, but I want to change. The code on spss that I've been using for all these years is this one"

#p2010
if (v2010=1) p2010=TOTALNV.
if (v2010=0) p2010=0.
if (v2010=2) p2010=TOTALNV-1.
if (v2010=3) p2010=TOTALNV-2.
if (v2010=4) p2010=TOTALNV-3.
if (v2010=5) p2010=TOTALNV-4.
if (v2010=6) p2010=TOTALNV-5.

compute p2009=p2010-v2009.
if (p2009=-1) p2009=TOTALNV.
if (p2009=-2) p2009=TOTALNV-1.
if (p2009=-3) p2009=TOTALNV-2.
if (p2009=-4) p2009=TOTALNV-3.
if (p2009=-5) p2009=TOTALNV-4.
if (p2009=-6) p2009=TOTALNV-5.
if (v2009=0) p2009=0.

compute p2008=p2009-v2008.
if (p2008=-1) p2008=TOTALNV-v2010.
if (p2008=-2) p2008=TOTALNV-v2010-1.
if (p2008=-3) p2008=TOTALNV-v2010-2.
if (p2008=-4) p2008=TOTALNV-v2010-3.
if (p2008=-5) p2008=TOTALNV-v2010-4.
if (p2008=-6) p2008=TOTALNV-v2010-5.
if (v2008=0) p2008=0.

compute p2007=p2008-v2007.
if (p2007=-1) p2007=TOTALNV-v2010-v2009.
if (p2007=-2) p2007=TOTALNV-v2010-v2009-1.
if (p2007=-3) p2007=TOTALNV-v2010-v2009-2.
if (p2007=-4) p2007=TOTALNV-v2010-v2009-3.
if (p2007=-5) p2007=TOTALNV-v2010-v2009-4.
if (p2007=-6) p2007=TOTALNV-v2010-v2009-5.
if (v2007=0) p2007=0.

These are my functions, sorry, it is pretty horrible.

varp2010 <- function(y, w){ #x = p2010, y = V2010, w = TotalNV
  (ifelse(y == 1, w, 
         ifelse(y == 0, 0,
                 ifelse(y == 2, (w-1), 
                        ifelse(y == 3, (w-2), 
                               ifelse(y == 4, (w-3), 
                                      ifelse(y == 5, (w-4),
                                             ifelse(y == 6, (w-5), 0))))))))


varp2009 <- function(y, w, z){
    (ifelse(y == (-1), w, 
          ifelse(y == -2, (w-1), 
                 ifelse(y == -3, (w-2), 
                        ifelse(y == -4, (w-3), 
                               ifelse(y == -5, (w-4),
                                      ifelse(y == -6, (w-5),
                                             ifelse(z == 0, 0, y))))))))
  }

I created the variables called sum to be easy to work with sum2009 = TOTALNV-v2010-v2009 And this is my mutate function:

BH_final_All_Wn <- BH_final_All_Wn %>%  
  mutate(pr2010 = varp2010(y = V2010, w = TOTALNV),
         pr2009 = pr2010 - V2009 %>%
           varp2009(y = pr2009, w = TOTALNV, z = V2009),
         pr2008 = pr2009 - V2008 %>%
           varp2009(y = pr2008, w = sum2008, z = V2008),
         pr2007 = pr2008 - V2007 %>% 
           varp2009(y = pr2007, w = sum2007, z = V2007),
         pr2006 = pr2007 - V2006 %>% 
           varp2009(y = pr2006, w = sum2006, z = V2006),
         pr2005 = pr2006 - V2005 %>%
           varp2009(y = pr2005, w = sum2005, z = V2005),
         pr2004 = pr2005 - V2004 %>% 
           varp2009(y = pr2004, w = sum2004, z = V2004),
         pr2003 = pr2004 - V2003 %>% 
           varp2009(y = pr2003, w = sum2003, z = V2003),
         pr2002 = pr2003 - V2002 %>% 
           varp2009(y = pr2002, w = sum2002, z = V2002),
         pr2001 = pr2002 - V2001 %>% 
           varp2009(y = pr2001, w = sum2001, z = V2001),
         pr2000 = pr2001 - V2000 %>% 
           varp2009(y = pr2000, w = sum2000, z = V2000),
         pr1999 = pr2000 - V1999 %>% 
           varp2009(y = pr1999, w = sum1999, z = V1999),
         pr1998 = pr1999 - V1998 %>% 
           varp2009(y = pr1998, w = sum1998, z = V1998),
         pr1997 = pr1998 - V1997 %>% 
           varp2009(y = pr1997, w = sum1997, z = V1997),
         pr1996 = pr1997 - V1996 %>% 
           varp2009(y = pr1996, w = sum1996, z = V1996)) 

My data's too big, around 300000 observations. I will be thankful if someone suggests the​ easiest way to do this.

Best

Aucun commentaire:

Enregistrer un commentaire