[résolu] Création nouvelle variable

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

Agatha Bataille
Messages : 14
Enregistré le : 06 Mar 2017, 10:31

[résolu] Création nouvelle variable

Messagepar Agatha Bataille » 13 Mar 2017, 15:17

Bonjour,
Je bloque depuis un moment sur cette question, je me résous donc à demander un peu d'aide :)
J'ai une base de donner qui regroupe les réponses de plus de 500 individus à un questionnaire comportant 20 questions. J'ai deux problèmes :
1) j'ai 20 variable pour ce questionnaire (MACH_1 à 20) correspondant à chaque question et je souhaiterais ajouter une nouvelle variable les regroupant.
2) je dois calculer le score pour chaque individu, je souhaiterais donc rajouter une variable correspondant au résultat
On m'a d'ailleurs donner la formule suivante mais je ne sais pas trop comment l'opérationnaliser sur R :
time_elapsed = (submit time)-(load time) in seconds.
score. = $_POST['Q1']
+ $_POST['Q2']
+ (6-$_POST['Q3'])
+ (6-$_POST['Q4'])
+ $_POST['Q5']
+ (6-$_POST['Q6'])
+ (6-$_POST['Q7'])
+ $_POST['Q8']
+ (6-$_POST['Q9'])
+ (6-$_POST['Q10'])
+ (6-$_POST['Q11'])
+ $_POST['Q12']
+ $_POST['Q13']
+ (6-$_POST['Q14'])
+ $_POST['Q15']
+ (6-$_POST['Q16'])
+ $_POST['Q17']
+ $_POST['Q18']
+ $_POST['Q19']
+ $_POST['Q20'];
est-ce suffisant pour R (en plus de lui indiquer de ranger les résultats en une nouvelle variable ?)

Merci d'avance pour votre aide

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

Re: Création nouvelle variable

Messagepar Pierre-Yves Berrard » 13 Mar 2017, 16:51

Bonjour,

Si votre base est un data.frame ayant pour nom "ma_base" et le nom de la nouvelle variable "score", la syntaxe est :

Code : Tout sélectionner

ma_base$score <- ma_base$MACH_1 + ma_base$MACH_2 + (6 - ma_base$MACH_3) + ...
PY

Agatha Bataille
Messages : 14
Enregistré le : 06 Mar 2017, 10:31

Re: Création nouvelle variable

Messagepar Agatha Bataille » 13 Mar 2017, 17:23

Merci beaucoup pour votre réponse, je vais essayer cela.
Savez-vous comment je peut faire pour regrouper mes variables en une seule (MACH_IV <- regroupant MACH_1, MACH_... jusqu'à MACH_20) pour que la nouvelle variable se rajoute aux autres dans ma dataframe ?

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

Re: Création nouvelle variable

Messagepar Pierre-Yves Berrard » 13 Mar 2017, 17:57

Je ne sais pas ce que vous entendez par "regrouper".
Vous avez regardé par là ?
PY

Agatha Bataille
Messages : 14
Enregistré le : 06 Mar 2017, 10:31

Re: Création nouvelle variable

Messagepar Agatha Bataille » 13 Mar 2017, 18:03

oui, je pense que je vais abandonner cela pour le moment

Agatha Bataille
Messages : 14
Enregistré le : 06 Mar 2017, 10:31

Re: Création nouvelle variable

Messagepar Agatha Bataille » 14 Mar 2017, 14:47

Je dois faire un nouveau calcul comme le premier mais les indications fournies ne sont pas les mêmes puisque pour ce questionnaire les réponses (NPI_1 à 40) sont soit 1, soit 2 mais j'ai beau essayer de différentes manières je n'y arrive vraiment pas. Si vous avez des conseils, je suis toute ouïe :)

score. = ((int) $_POST['Q1'] == 1)
+ ((int) $_POST['Q2'] == 1)
+ ((int) $_POST['Q3'] == 1)
+ ((int) $_POST['Q4'] == 2)
+ ((int) $_POST['Q5'] == 2)
+ ((int) $_POST['Q6'] == 1)
+ ((int) $_POST['Q7'] == 2)
+ ((int) $_POST['Q8'] == 1)
+ ((int) $_POST['Q9'] == 2)
+ ((int) $_POST['Q10'] == 2)
+ ((int) $_POST['Q11'] == 1)
+ ((int) $_POST['Q12'] == 1)
+ ((int) $_POST['Q13'] == 1)
+ ((int) $_POST['Q14'] == 1)
+ ((int) $_POST['Q15'] == 2)
+ ((int) $_POST['Q16'] == 1)
+ ((int) $_POST['Q17'] == 2)
+ ((int) $_POST['Q18'] == 2)
+ ((int) $_POST['Q19'] == 2)
+ ((int) $_POST['Q20'] == 2)
+ ((int) $_POST['Q21'] == 1)
+ ((int) $_POST['Q22'] == 2)
+ ((int) $_POST['Q23'] == 2)
+ ((int) $_POST['Q24'] == 1)
+ ((int) $_POST['Q25'] == 1)
+ ((int) $_POST['Q26'] == 2)
+ ((int) $_POST['Q27'] == 1)
+ ((int) $_POST['Q28'] == 2)
+ ((int) $_POST['Q29'] == 1)
+ ((int) $_POST['Q30'] == 1)
+ ((int) $_POST['Q31'] == 1)
+ ((int) $_POST['Q32'] == 2)
+ ((int) $_POST['Q33'] == 1)
+ ((int) $_POST['Q34'] == 1)
+ ((int) $_POST['Q35'] == 2)
+ ((int) $_POST['Q36'] == 1)
+ ((int) $_POST['Q37'] == 1)
+ ((int) $_POST['Q38'] == 1)
+ ((int) $_POST['Q39'] == 1)
+ ((int) $_POST['Q40'] == 2);

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Création nouvelle variable

Messagepar Serge Rapenne » 14 Mar 2017, 16:08

Bonjour,

Si j'ai bien compris le pb, tu veux sommer pour chaque ligne, le nb de réponse qui valent 1 ou 2 selon les questions.
Une solution possible :

Code : Tout sélectionner

# Creation d'un jeu reduit de valeur pour l'exemple
dta<-structure(list(Q1 = c(1, 1, 2, 1, 2), Q2 = c(1, 2, 1, 2, 1),Q3 = c(1, 1, 1, 1, 1), Q4 = c(2, 1, 2, 1, 2), Q5 = c(1, 1, 1, 2, 2)), .Names = c("Q1", "Q2", "Q3", "Q4", "Q5"), row.names = c(NA,-5L), class = "data.frame")
dta
  Q1 Q2 Q3 Q4 Q5
1  1  1  1  2  1
2  1  2  1  1  1
3  2  1  1  2  1
4  1  2  1  1  2
5  2  1  1  2  2

#tu crées un variable avec le "bon" choix pour chaque question par exemple
choix=c(1,1,1,2,2)

#puis le calcul des sommes par ligne
apply(dta,1,function(x) sum(x==choix))


Serge

Agatha Bataille
Messages : 14
Enregistré le : 06 Mar 2017, 10:31

Re: Création nouvelle variable

Messagepar Agatha Bataille » 14 Mar 2017, 16:15

en fait j'ai une base de donner qui regroupe les réponses de plus de 500 individus à un questionnaire comportant 40 questions (les variables NPI_1 à NPI_40 renvoyant aux réponses des 500 individus pour chacune des 40 questions) avec pour réponses soit 1, soit 2. Je dois calculer le score pour chaque individu, je souhaiterais donc rajouter une variable correspondant au résultat
On m'a donner la formule ci-dessus mais je ne sais pas trop comment l'opérationnaliser sur R. elle est censé me permettre d'inverser le codage. en gros, certaine question sont normale si la personne répond 1 alors le score pour cette question est 1, mais certaine sont inverser, auquel cas la réponse 1 vaut en fait 2. du coup je dois indiquer a R d'inverser le codage puis calculer les scores pour chaque individu (somme des réponses aux 40 questions)

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Création nouvelle variable

Messagepar Serge Rapenne » 14 Mar 2017, 16:36

Ma solution permet bien de faire ça, il faut juste que le vecteur "choix" contienne 40 valeurs, 1 par question avec 1 si la réponse à comptabiliser est 1, 2 dans le cas contraire. Au vue du calcul que tu donnes, je dirais que :

Code : Tout sélectionner

 choix<-c(1,1,1,2,2,1,2,1,2,2,1,1,1,1,2,1,2,2,2,2,1,2,2,1,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2)


Serge

Agatha Bataille
Messages : 14
Enregistré le : 06 Mar 2017, 10:31

Re: Création nouvelle variable

Messagepar Agatha Bataille » 14 Mar 2017, 16:44

En effet, j'avais mal lue ^^
Donc il ne me reste plus qu'a faire :
choix<-c(1,1,1,2,2,1,2,1,2,2,1,1,1,1,2,1,2,2,2,2,1,2,2,1,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,2)

#puis le calcul des sommes par ligne
apply(UT2J,1,function(x) sum(x==choix))

(UT2J étant le nom de ma data frame comportant 93 variables au total dont celles qui m'intéressent)

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Création nouvelle variable

Messagepar Serge Rapenne » 14 Mar 2017, 16:59

Presque,

il faut dans ce cas, sélectionner uniquement les colonnes contenant les réponses. Si par ex ce sont les colonnes 11 à 40

Code : Tout sélectionner

apply(UT2J[,11:40],1,function(x) sum(x==choix))


Serge

Agatha Bataille
Messages : 14
Enregistré le : 06 Mar 2017, 10:31

Re: Création nouvelle variable

Messagepar Agatha Bataille » 14 Mar 2017, 17:12

C'est bien ce qu'il me semblait, merci beaucoup pour votre aide en tout cas


Retourner vers « Questions en cours »

Qui est en ligne

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