Traduciendo Stata a R y teniendo problemas con is.na.
Estoy traduciendo código de Stata a código de R, pero ahora tengo algunos problemas de novato como este.
Este es mi código de Stata:
gen aposentadofam=1 if proprendaposent > 0 & proprendaposent ~=.;
replace aposentadofam=0 if proprendaposent == 0 | proprendaposent ==.;
Y esto es lo que intenté hacer en R:
# pemg <- mutate(pemg, aposentadofam = NA_real_)
# pemg <- mutate(pemg, aposentadofam = case_when(proprendaposent >0 & !is.na(proprendaposent) ~ 1, TRUE ~ aposentadofam))
# pemg <- mutate(pemg, aposentadofam = case_when(proprendaposent==0 | is.na(proprendaposent) ~ 0, TRUE ~ aposentadofam))
La línea con is.na()
parece estar funcionando correctamente, pero la que tiene !is.na()
no. Me da este mensaje de error:
LHS of case 1 (`proprendaposent > 0 & !is.na(proprendaposent) ~ 1`) must be a logical vector, not a `formula` object.
¿Qué debo hacer?
davy.ai
El problema con el código R es que la función
case_when()
espera un vector lógico como el lado izquierdo de cada caso, pero la expresiónproprendaposent > 0 & !is.na(proprendaposent)
es un objeto formula.Para solucionar esto, puede usar la función
if_else()
, que toma una condición lógica como primer argumento y evalúa a un valor si la condición es “VERDADERA” y otro valor si es “FALSO”. Así es como podría traducir el código Stata a R usandoif_else()
:Este código establece la variable
aposentadofam
en 1 siproprendaposent
es mayor que 0 y no está perdido (!is.na()
), 0 si es igual a 0 o está perdido (is.na()
), yNA
de lo contrario.