Reputation: 2102
I've got an ifelse
statement that is not doing what it should. I thought it might have to do with the column type (haven_labelled
), but if I try to wrap the replacements in as.numeric
the problem persists:
data <- structure(list(ano_encuesta = structure(c(2010, 2010, 2010, 2010,
2010, 2010, 2010, 2010, 2010), label = "Año de Encuestaje", format.stata = "%12.0g"),
region = structure(c(8, 9, 10, 11, 12, 13, 14, 15, 8), label = "Región", format.stata = "%12.0g", labels = c(`Región de Tarapacá` = 1,
`Región de Antofagasta` = 2, `Región de Atacama` = 3, `Región de Coquimbo` = 4,
`Región de Valparaiso` = 5, `Región del Libertador Gral Bernardo O'higgins` = 6,
`Región del Maule` = 7, `Región del Bio Bío` = 8, `Región de La Araucanía` = 9,
`Región de los Lagos` = 10, `Región De Aisén del Gral. Carlos Ibañez del Campo` = 11,
`Región de Magallanes y Antártica Chilena` = 12, `Región Metropolitana` = 13,
`Región de los Ríos` = 14, `Región de Arica y Parinacota` = 15
), class = "haven_labelled"), region_2 = structure(c(8, 9,
10, 11, 12, 13, 14, 15, 16), label = "RECODE of REGION (Región)", format.stata = "%49.0g", labels = c(`Región de Tarapacá` = 1,
`Región de Antofagasta` = 2, `Región de Atacama` = 3, `Región de Coquimbo` = 4,
`Región Valparaíso` = 5, `Región del Libertador Gral. Bernardo O'Higgins` = 6,
`Región del Maule` = 7, `Región del Biobío` = 8, `Región de La Araucanía` = 9,
`Región de Los Lagos` = 10, `Región de Aysén del Gral. Carlos Ibáñez del Campo` = 11,
`Región de Magallanes y Antártica Chilena` = 12, `Región Metropolitana` = 13,
`Región Los Ríos` = 14, `Región de Arica y Parinacota` = 15,
`Región de Ñuble` = 16), class = "haven_labelled")), row.names = c(NA,
-9L), class = c("tbl_df", "tbl", "data.frame"))
data %>% mutate(region_aer = ifelse(unique(data $ano_encuesta) %in% 2010:2017, region_2, region))
# A tibble: 9 x 4
ano_encuesta region region_2 region_aer
<dbl> <hvn_lbll> <hvn_lbll> <dbl>
1 2010 8 8 8
2 2010 9 9 8
3 2010 10 10 8
4 2010 11 11 8
5 2010 12 12 8
6 2010 13 13 8
7 2010 14 14 8
8 2010 15 15 8
9 2010 8 16 8
As you can see, in this case the column region_aer
should take the values from the column region_2
since the condition unique(data$ano_encuesta) %in% 2010:2017
evaluates to TRUE
.
What is going on?
Some info con my R version:
_
platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 4
minor 0.0
year 2020
month 04
day 24
svn rev 78286
language R
version.string R version 4.0.0 (2020-04-24)
nickname Arbor Day
Upvotes: 0
Views: 97
Reputation: 388982
ifelse
will return output of same length as the test (condition) you are checking. unique(data$ano_encuesta) %in% 2010:2017
returns output of length 1 hence it returns only the 1st value of region_2
which is 8 and it is recycled and applied to all the values in the column.
If you want to check for unique
values only use if
/else
library(dplyr)
data %>%
mutate(region_aer = if(unique(ano_encuesta) %in% 2010:2017) region_2 else region)
# ano_encuesta region region_2 region_aer
# <dbl> <dbl+lbl> <dbl+lbl> <dbl+lbl>
#1 2010 8 [Región del Bio Bí… 8 [Región del Biobío] 8 [Región del Biobío]
#2 2010 9 [Región de La Arau… 9 [Región de La Arau… 9 [Región de La Arauc…
#3 2010 10 [Región de los Lag… 10 [Región de Los Lag… 10 [Región de Los Lago…
#4 2010 11 [Región De Aisén d… 11 [Región de Aysén d… 11 [Región de Aysén de…
#5 2010 12 [Región de Magalla… 12 [Región de Magalla… 12 [Región de Magallan…
#6 2010 13 [Región Metropolit… 13 [Región Metropolit… 13 [Región Metropolita…
#7 2010 14 [Región de los Río… 14 [Región Los Ríos] 14 [Región Los Ríos]
#8 2010 15 [Región de Arica y… 15 [Región de Arica y… 15 [Región de Arica y …
#9 2010 8 [Región del Bio Bí… 16 [Región de Ñuble] 16 [Región de Ñuble]
Or use ifelse
without unique
-
data %>%
mutate(region_aer = ifelse(ano_encuesta %in% 2010:2017, region_2 , region))
Upvotes: 4