0

I am trying to add a new variable to a tibble that is the population of each of the areas I am studying using the mutate function. For this I think I need to use the ifelse function (I have tried the case_when function) as the zones are identified by their acronyms; and I am trying to assign to each one of their acronyms the population.

So this is what I been doing:

hosp%>% mutate(poblacion =ifelse(hosp$provincia_iso=="A", 1879888,  ifelse(hosp$provincia_iso=="VI", 333940, 
        ifelse(hosp$provincia_iso=="AB", 388270, ifelse(hosp$provincia_iso=="AL", 727945, ifelse(hosp$provincia_iso=="O", 1018784, 
        ifelse(hosp$provincia_iso=="AV", 157664, ifelse((hosp$provincia_iso=="BA"), 672137, ifelse((hosp$provincia_iso=="PM"), 672137,
                 ifelse((hosp$provincia_iso=="B"), 5743402, ifelse((hosp$provincia_iso=="BU"), 357650,
                 ifelse((hosp$provincia_iso=="CC"), 391850,ifelse((hosp$provincia_iso=="CA"), 1244049,
                 ifelse((hosp$provincia_iso=="S"), 582905,ifelse((hosp$provincia_iso=="CS"), 585590,
                 ifelse((hosp$provincia_iso=="CR"), 495045,ifelse((hosp$provincia_iso=="CO"), 781451, 
                 ifelse((hosp$provincia_iso=="CU"), 196139, ifelse((hosp$provincia_iso=="GI"), 781788,
                 ifelse((hosp$provincia_iso=="GR"), 919168, ifelse((hosp$provincia_iso=="GU"), 261995,
                 ifelse((hosp$provincia_iso=="SS"), 727121,  ifelse((hosp$provincia_iso=="H"), 524278,
                 ifelse((hosp$provincia_iso=="HU"), 222687,  ifelse((hosp$provincia_iso=="J"), 631381,
                 ifelse((hosp$provincia_iso=="C"), 1121815,  ifelse((hosp$provincia_iso=="LO"), 319914, 
                 ifelse((hosp$provincia_iso=="GC"), 131065, ifelse((hosp$provincia_iso=="LE"), 456439,
                 ifelse((hosp$provincia_iso=="L"), 438517, ifelse((hosp$provincia_iso=="LU"), 327946,
                 ifelse((hosp$provincia_iso=="M"), 6779888,  ifelse((hosp$provincia_iso=="MA"), 1685920,
                 ifelse((hosp$provincia_iso=="MU"), 1511251, ifelse((hosp$provincia_iso=="NA"), 661197,
                 ifelse((hosp$provincia_iso=="OR"), 306650, ifelse((hosp$provincia_iso=="P"), 160321,
                 ifelse((hosp$provincia_iso=="PO"), 945408,  ifelse((hosp$provincia_iso=="SA"), 329245,
                 ifelse((hosp$provincia_iso=="TF"), 1044887,  ifelse((hosp$provincia_iso=="SG"), 153478,
                 ifelse((hosp$provincia_iso=="SE"), 1950219, ifelse((hosp$provincia_iso=="SO"), 88894,
                 ifelse((hosp$provincia_iso=="T"), 816772, ifelse((hosp$provincia_iso=="TE"), 134176, 
                 ifelse((hosp$provincia_iso=="TO"), 703772, ifelse((hosp$provincia_iso=="V"), 2591875,
                 ifelse((hosp$provincia_iso=="VA"), 520649, ifelse((hosp$provincia_iso=="BI"), 1159443, 
                 ifelse((hosp$provincia_iso=="ZA"), 170588, ifelse((hosp$provincia_iso=="Z"), 972528, 
                 ifelse((hosp$provincia_iso=="CE"), 84202,  ifelse((hosp$provincia_iso=="ML"), 87076, NA)))))))))))))

But maybe it will be easier for you to help me with a simpler example:

province <- c("A", "B", "C", "D")
cases<-c(135,120,160, 100)
df <- data.frame(province, cases)

df%>% mutate(poblacion =ifelse(df$ province=="A", 1879888,  ifelse( df$ province=="C", 333940,
ifelse( df$ province=="B", 388270, ifelse(df$ province=="D", 727945, NA))))))))))))))))))))))

The problem is that while this works, when I run the upper part of the question script I get some "stackoverflow error" for line 24 and I only get values for the last 2 provinces of the script.

Also I would like to ask if there is a simpler way to do this.

2 Answers 2

1

This is how you could do it with case_when:

province <- c("A", "B", "C", "D")
cases<-c(135,120,160, 100)
df <- data.frame(province, cases)

df%>% 
  mutate(poblacion =case_when(
    province=="A" ~ 1879888,
    province=="C" ~ 333940,
    province=="B" ~ 388270, 
    province=="D" ~ 727945, 
    TRUE ~ NA_real_))

#   province cases poblacion
# 1        A   135   1879888
# 2        B   120    388270
# 3        C   160    333940
# 4        D   100    727945

I think if you used this approach, it would solve the problem, for example:

hosp%>% 
  mutate(poblacion =
    cae_when(
      hosp$provincia_iso=="A" ~ 1879888,  
      hosp$provincia_iso=="VI" ~ 333940, 
      hosp$provincia_iso=="AB" ~ 388270, 
      hosp$provincia_iso=="AL" ~ 727945, 
      hosp$provincia_iso=="O" ~ 1018784, 
      hosp$provincia_iso=="AV" ~ 157664, 
      hosp$provincia_iso=="BA" ~ 672137, 
      hosp$provincia_iso=="PM" ~ 672137,
      hosp$provincia_iso=="B" ~ 5743402, 
      hosp$provincia_iso=="BU" ~ 357650,
      hosp$provincia_iso=="CC" ~ 391850,
      hosp$provincia_iso=="CA" ~ 1244049,
      hosp$provincia_iso=="S" ~ 582905,
      hosp$provincia_iso=="CS" ~ 585590,
      hosp$provincia_iso=="CR" ~ 495045,
      hosp$provincia_iso=="CO" ~ 781451, 
      hosp$provincia_iso=="CU" ~ 196139, 
      hosp$provincia_iso=="GI" ~ 781788,
      hosp$provincia_iso=="GR" ~ 919168, 
      hosp$provincia_iso=="GU" ~ 261995,
      hosp$provincia_iso=="SS" ~ 727121,  
      hosp$provincia_iso=="H" ~ 524278,
      hosp$provincia_iso=="HU" ~ 222687,  
      hosp$provincia_iso=="J" ~ 631381,
      hosp$provincia_iso=="C" ~ 1121815,  
      hosp$provincia_iso=="LO" ~ 319914, 
      hosp$provincia_iso=="GC" ~ 131065, 
      hosp$provincia_iso=="LE" ~ 456439,
      hosp$provincia_iso=="L" ~ 438517, 
      hosp$provincia_iso=="LU" ~ 327946,
      hosp$provincia_iso=="M" ~ 6779888,  
      hosp$provincia_iso=="MA" ~ 1685920,
      hosp$provincia_iso=="MU" ~ 1511251, 
      hosp$provincia_iso=="NA" ~ 661197,
      hosp$provincia_iso=="OR" ~ 306650, 
      hosp$provincia_iso=="P" ~ 160321,
      hosp$provincia_iso=="PO" ~ 945408,  
      hosp$provincia_iso=="SA" ~ 329245,
      hosp$provincia_iso=="TF" ~ 1044887,  
      hosp$provincia_iso=="SG" ~ 153478,
      hosp$provincia_iso=="SE" ~ 1950219, 
      hosp$provincia_iso=="SO" ~ 88894,
      hosp$provincia_iso=="T" ~ 816772, 
      hosp$provincia_iso=="TE" ~ 134176, 
      hosp$provincia_iso=="TO" ~ 703772, 
      hosp$provincia_iso=="V" ~ 2591875,
      hosp$provincia_iso=="VA" ~ 520649, 
      hosp$provincia_iso=="BI" ~ 1159443, 
      hosp$provincia_iso=="ZA" ~ 170588, 
      hosp$provincia_iso=="Z" ~ 972528, 
      hosp$provincia_iso=="CE" ~ 84202,  
      hosp$provincia_iso=="ML" ~ 87076,
      TRUE ~ NA_real_))

Sign up to request clarification or add additional context in comments.

Comments

0

Try match

> df %>% 
+   mutate(poblacion = c(1879888,388270,333940,727945)[match(province,c("A","B","C","D"))])
  province cases poblacion
1        A   135   1879888
2        B   120    388270
3        C   160    333940
4        D   100    727945

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.