2017-07-31 8 views
0

Je suis en train de reproduire un code, mais je suis en cours d'exécution en difficulté:Utiliser si, sinon au sein de recodage

data$var1 a des valeurs de 1-7 que je suis en train de réduire à seulement 2 valeur dans une nouvelle variable appelée data$var2 . Le code ressemble à ceci:

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

Cependant, quand j'exécuter du code, je reçois l'erreur suivante:

"Error: Argument 2 must be named, not unnamed"

Je travaille dans la dernière version de R et en utilisant le package Tidyverse.

Qu'est-ce qui me manque? Que signifie 'Argument 2 unnamed'?

Répondre

2

Je conseille l'utilisation ifelse:

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

Votre utilisation de recode est faux:

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

au lieu de plusieurs arguments [name]=[replacement] vous avez fourni une seule chaîne. Pour plus d'informations, lisez help('recode').

chemin avec recode serait quelque chose comme

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

"Correct" Mais vous devez tenir à ifelse dans ce cas.

0

Il y a beaucoup de choses à faire, probablement beaucoup d'entre elles sont plus faciles que mon approche.

# 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 

Sidenote: J'utilisé df comme le nom de mon objet, parce que ce n'est pas une bonne idée d'appeler des objets data. Le nom data est réservé dans R à d'autres fins (voir ?data). Même si dans ce cas, il ne va probablement pas conduire à des problèmes, je recommande encore d'utiliser df (ou toute autre chose) au lieu de data