Estoy tratando de replicar un código, pero tengo problemas:

data$var1 tiene valores de 1 a 7 que estoy tratando de reducir a solo 2 valores en una nueva variable llamada data$var2. El código tiene este aspecto:

data$var2 <- recode(data$var1, "1:3=1; else=0")

Sin embargo, cuando ejecuto código, aparece el siguiente error:

"Error: el argumento 2 debe tener un nombre, no sin nombre"

Estoy trabajando en la última versión de R y usando el paquete Tidyverse.

¿Qué me estoy perdiendo? ¿Qué significa "Argumento 2 sin nombre"?

0
user8394142 31 jul. 2017 a las 16:09

2 respuestas

La mejor respuesta

Aconsejaría usar ifelse:

data$var2 <- ifelse(data$var1 < 4, 1, 0)

Su uso de recode es incorrecto:

data$var2<- recode(data$var1, "1:3=1; else=0")

En lugar de varios argumentos [name]=[replacement], proporcionó solo una cadena. Para obtener más información, lea help('recode').

La forma "correcta" con recode sería algo como

data$var2 <- recode(data$var1, `1` = 1, `2` = 1, `3` = 1, .default = 0)

Pero debería seguir con ifelse en este caso.

2
Andrey Kolyadin 31 jul. 2017 a las 13:22

Hay muchos para hacer esto, probablemente muchos de ellos son más fáciles que mi enfoque.

 # Create some data
 df      <- c()
 df$var1 <- ceiling(runif(20, min = 0.5, max = 7.5))
 df$var1
 #  [1] 5 8 5 2 6 6 8 4 5 4 4 7 3 6 1 5 7 6 5 6

 # inds will contain TRUE/FALSE 
 inds           <- (df$var1 <= 3)
 df$var2[inds]  <- 1
 df$var2[!inds] <- 0
 df$var2
 # [1] 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1

Nota al margen: utilicé df como el nombre de mi objeto, porque no es una buena idea llamar a los objetos data. El nombre data está reservado en R para otros propósitos (ver ?data). Aunque en este caso probablemente no dará lugar a problemas, todavía recomiendo usar df (o cualquier otra cosa) en lugar de data

0
KenHBS 31 jul. 2017 a las 13:24