2015-10-09 2 views
0

J'essaye de recoder un ensemble de données qui ne peut pas être facilement fait avec la fonction split ou la fonction ifelse. Comment est-ce que je recoderais les données suivantes?Recodage continu en variables continues (sans fonction de division) dans R

1 -> 1
2 -> 0
3 -> 0
4 -> 1
5 -> 1
7 -> 0
8 -> 1

Nous vous remercions de votre temps!

+1

Pourquoi? – zx8754

+1

Pas clair ce que votre entrée est. – Frank

+0

Il s'agit de données provenant d'une variable d'un ensemble de données préexistant. –

Répondre

0

Peut-être essayer? Bien que continu à continu implique généralement un certain type de fonction qui pourrait être appliquée.

x <- c(1:5, 7:8) 
x 
# [1] 1 2 3 4 5 7 8 

x[x == 1] <- 1 
x[x == 2] <- 0 
x[x == 3] <- 0 
x[x == 4] <- 1 
x[x == 5] <- 1 
x[x == 7] <- 0 
x[x == 8] <- 1 
x 
# [1] 1 0 0 1 1 0 1 
+2

Plus facile: 'x [x% en% c (2,3,7)] <- 0; x [x% en% c (1,4,5,8)] <- 1' – nico

2

Vous pouvez essayer:

library(car) 
v <- c(1,2,3,4,5,6,7,8) 
recode(v, "c(1,4,5,8) = 1; else = 0") 

Ou, comme par mentionné par @ zx8754 vous pouvez utiliser ifelse():

ifelse(v %in% c(1,4,5,8), 1, 0) 

Ce qui donne:

#[1] 1 0 0 1 1 0 0 1 
4

Une autre approche:

x <- +(x %in% c(1,4,5,8)) 
#[1] 1 0 0 1 1 0 1 

La nomenclature +(..) est un procédé pour contraindre un vecteur logique à l'entier de la même manière que le ferait as.integer(..). Pourquoi pas `ifelse()`

+2

'ifelse' est plus général, mais si OP a vraiment un mapping en sortie 0/1, c'est la meilleure approche. BTW '+' est le "R slang" pour convertir une logique en entier avec parcimonie. – MichaelChirico

+0

Je suis d'accord. Il n'y a pas besoin de 'ifelse' si c'est la sortie désirée. Vous ne diriez pas 'ifelse (condition, TRUE, FALSE)' car il est redondant. –