Amélioration codage

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

jeaneudes trihan
Messages : 18
Enregistré le : 26 Juin 2018, 06:23

Amélioration codage

Messagepar jeaneudes trihan » 18 Fév 2021, 14:56

Bonjour à tous,

J'aurais aimé avoir votre avis concernant une amélioration.
J'ai cherché à recoder une variable numérique "a" (allant de 0 à 55) , afin d'obtenir une nouvelle variable numérique "b" ou les valeurs seraient codées 0 si a≤25 , 1 si 25<a≤40 et 2 si a>40.

Pour cela j'ai utilisé le code suivant qui fonctionne.

Code : Tout sélectionner

data$b <- as.numeric(data$a)
data$b[data$b<26] <- 0
data$b[data$b>40] <- 2
data$b[data$b>2] <- 1


Même si cette façon fonctionne, je la trouve moche et peu pratique.
Savez vous quelle fonction me permettrait d'obtenir le même résultats de manière plus rapide?

Merci encore de toute l'aide que vous nous apportez.
Amicalement
JET

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Amélioration codage

Messagepar Pierre-Yves Berrard » 18 Fév 2021, 15:48

Bonjour,

Code : Tout sélectionner

findInterval(data$a, c(-Inf, 25, 40), left.open = TRUE) - 1
# (on soustrait 1, car les numéros d'intervalles en sortie commencent à 1) 

Concis et normalement très rapide.
PY

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: Amélioration codage

Messagepar Eric Casellas » 18 Fév 2021, 16:14

Bonjour,

Une autre possibilité est d'utiliser la fonction ifelse

Code : Tout sélectionner

data$b <- ifelse(data$a < 26, 0, ifelse(data$a <= 40, 1, 2))


Eric
Eric

Eric Wajnberg
Messages : 776
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: Amélioration codage

Messagepar Eric Wajnberg » 19 Fév 2021, 06:09

Code : Tout sélectionner

> a=runif(100,0,55)
>
 b=cut(a,breaks=c(0,25,40,55),labels=c(0,1,2))

HTH, Eric.

jeaneudes trihan
Messages : 18
Enregistré le : 26 Juin 2018, 06:23

Re: Amélioration codage

Messagepar jeaneudes trihan » 23 Fév 2021, 14:11

Merci à tous pour vos réponses.
Elles marchent effectivement toutes.

jeaneudes trihan
Messages : 18
Enregistré le : 26 Juin 2018, 06:23

Re: Amélioration codage

Messagepar jeaneudes trihan » 24 Fév 2021, 15:32

Par contre , elles sont toutes identifiées alors comme "factors". Mais je pense que je peux facilement les repasser en variables numériques avec la fonction as.numeric (data).
Merci encore.

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: Amélioration codage

Messagepar Eric Casellas » 24 Fév 2021, 15:51

jeaneudes trihan a écrit :Par contre , elles sont toutes identifiées alors comme "factors". Mais je pense que je peux facilement les repasser en variables numériques avec la fonction as.numeric (data).
Merci encore.


Oui, par contre fait attention avec as.numeric sur des factor, ca peut mal se passer si les facteurs ne sont pas dans le même ordres que les levels (faut au préalable convertir le factor en character)

Code : Tout sélectionner

> as.numeric(factor(x=1:10, levels=10:1))
 [1] 10  9  8  7  6  5  4  3  2  1
> as.numeric(as.character(factor(x=1:10, levels=10:1)))
 [1]  1  2  3  4  5  6  7  8  9 10


Eric
Eric

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Amélioration codage

Messagepar Pierre-Yves Berrard » 24 Fév 2021, 17:04

jeaneudes trihan a écrit :Par contre , elles sont toutes identifiées alors comme "factors". Mais je pense que je peux facilement les repasser en variables numériques avec la fonction as.numeric (data).
Merci encore.

Pas la mienne (findInterval).
PY


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité