Créer une variable sous condition

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

Nacim OUAHES
Messages : 4
Enregistré le : 07 Mar 2019, 08:48

Créer une variable sous condition

Messagepar Nacim OUAHES » 07 Mar 2019, 09:27

Bonjour,

Voici mon problème :
_Je cherche à créer une variable quantitative à partir de deux variables (quantitative et qualitative). La variable quantitative représente le nombre de cigarette consommées (1,2,3, ect.) et la variable qualitative se rapporte à l'unité de consommation (par jour, par semaine, par mois, par an).
_Ce que j'aimerais pouvoir faire c'est de créer une variable quantitative dans laquelle on aurait la consommation de cigarettes par jour, en convertissant de faite les lignes dans lesquelles les répondants de l'enquête ont utilisés les autres unités de consommation (semaine, mois et an).
_Exemple :

ID Var_cons_tabac var_unité_de_conso Nouvelle_variable
01 28 semaine 4

Je vous remercie par avance pour votre aide.

Cordialement.

Mickael Canouil
Messages : 504
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Créer une variable sous condition

Messagepar Mickael Canouil » 07 Mar 2019, 09:54

Bonjour,

Vous pouvez définir un vecteur avec la correspondance entre l'unité et le facteur correspond pour convertir en jour, par exemple:

Code : Tout sélectionner

all_units <- c("jour" = 1, "semaine" = 7, "mois" = 30)


Avec un jeu de donnée:

Code : Tout sélectionner

set.seed(07032019)
options(stringsAsFactors = FALSE)

dta <- data.frame(
  ID = 1:15,
  Var_cons_tabac = round(runif(n = 15, min = 0, max = 10)) *  rep(c(1, 10, 15), each = 5),
  var_unité_de_conso = rep(c("jour", "semaine", "mois"), each = 5)
)
dta
#>    ID Var_cons_tabac var_unité_de_conso
#> 1   1              9               jour
#> 2   2              1               jour
#> 3   3              3               jour
#> 4   4              9               jour
#> 5   5              8               jour
#> 6   6             90            semaine
#> 7   7             50            semaine
#> 8   8             40            semaine
#> 9   9              0            semaine
#> 10 10             40            semaine
#> 11 11             90               mois
#> 12 12             90               mois
#> 13 13             30               mois
#> 14 14             15               mois
#> 15 15             30               mois


Et une division:

Code : Tout sélectionner

dta[["Nouvelle_variable"]] <- dta[["Var_cons_tabac"]] / all_units[dta[["var_unité_de_conso"]]]
dta
#>    ID Var_cons_tabac var_unité_de_conso Nouvelle_variable
#> 1   1              9               jour          9.000000
#> 2   2              1               jour          1.000000
#> 3   3              3               jour          3.000000
#> 4   4              9               jour          9.000000
#> 5   5              8               jour          8.000000
#> 6   6             90            semaine         12.857143
#> 7   7             50            semaine          7.142857
#> 8   8             40            semaine          5.714286
#> 9   9              0            semaine          0.000000
#> 10 10             40            semaine          5.714286
#> 11 11             90               mois          3.000000
#> 12 12             90               mois          3.000000
#> 13 13             30               mois          1.000000
#> 14 14             15               mois          0.500000
#> 15 15             30               mois          1.000000


Cordialement,
Mickaël

Logez Maxime
Messages : 2866
Enregistré le : 26 Sep 2006, 11:35

Re: Créer une variable sous condition

Messagepar Logez Maxime » 07 Mar 2019, 10:56

Bonjour,

On peut aussi jouer avec les booléens :

Code : Tout sélectionner

with(dta, Var_cons_tabac/(1+6*(var_unité_de_conso=="semaine")+29*(var_unité_de_conso=="mois")))
Cordialement,
Maxime

Nacim OUAHES
Messages : 4
Enregistré le : 07 Mar 2019, 08:48

Re: Créer une variable sous condition

Messagepar Nacim OUAHES » 08 Mar 2019, 06:35

Merci beaucoup pour votre réponse.

J'ai toutefois un souci dans l'application du code et c'est probablement dû au fait que je ne l'ai pas compris.

L'application du code est le suivant :

all_units <- c("par jour" = 1, "par semaine" = 7, "par mois" = 30.5,"par an"=366) Cette ligne a fonctionné sans problème.

set.seed(08032019)
options(stringsAsFactors = FALSE)

bddinpes <- data.frame(
ID = 1:15216,
bddinpes$ta6s1 = round(runif(n = 15216, min = 0, max = 10)) * rep(c(1, 10, 15), each = 5),
bddinpes$ta6s1q = rep(c("par jour", "par semaine", "par mois","par an"), each = 5)
)

Donc pour expliquer mon application : j'ai une base de données de 15216 individus. Contrairement à ce que j'avais mis dans mon exemple, je n'ai pas de variable ID, du coup peut-être que le problème vient de là. Sinon, le nombre de personnes concernées par la consommation de tabac est de 1471.

Je vous met ci-dessus les remarques de r :
bddinpes <- data.frame(
+ ID = 1:15216,
+ bddinpes$ta6s1 = round(runif(n = 15216, min = 0, max = 10)) * rep(c(1, 10, 15), each = 5),
Error: unexpected '=' in:
" ID = 1:15216,
bddinpes$ta6s1 ="
> bddinpes$ta6s1q = rep(c("par jour", "par semaine", "par mois","par an"), each = 5)
Error in `$<-.data.frame`(`*tmp*`, ta6s1q, value = c("par jour", "par jour", :
replacement has 20 rows, data has 15216
> )
Error: unexpected ')' in ")"

Merci encore une fois de votre attention.

Cordialement

Nacim OUAHES
Messages : 4
Enregistré le : 07 Mar 2019, 08:48

Re: Créer une variable sous condition

Messagepar Nacim OUAHES » 08 Mar 2019, 07:53

Merci beaucoup Maxime.

Je n'avais pas vu votre réponse, mais effectivement ça a parfaitement fonctionné.

Cordialement.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité