Syntaxe for / if

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

Patricia OBEID
Messages : 68
Enregistré le : 10 Avr 2017, 19:03

Syntaxe for / if

Messagepar Patricia OBEID » 10 Mar 2018, 13:52

Bonjour à tous,
je viens solliciter votre aide car je n'arrive pas à formuler ce que je souhaite faire ...
J'ai un dataframe data1 contenant plusieurs colonnes dont GCQ et RefCQ.
Je voudrais créer une nouvelle colonne Attention qui prendrait la valeur
- Redo si data1$GCQ >=0.4 ou data1$RefCQ >=0.4
- ok si data1$GCQ <0.4 et data1$RefCQ <0.4

J'ai écrit :
data1$Attention <- 0
for (i in 1:nrow(data1)) {
if ((data1$GCQ >=0.4)||(data1$RefCQ >=0.4)) {
data1$Attention <- "Redo"
}
if ((data1$GQC <0.4)&&(data1$RefCQ <0.4)) {
data1$Attention <-"ok"}
}
mais la colonne Attention reste à 0

Je vous remercie d'avance de votre aide et de vos explications
Patricia

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

Re: Syntaxe for / if

Messagepar Pierre-Yves Berrard » 10 Mar 2018, 14:21

Bonjour,

Pas besoin d'une boucle for pour créer une variable en fonction d'autres.
Voir un exemple ici (sujet créé par vous-même).

Sinon le fait que "Attention" ne change pas est dû à l'utilisation des opérateurs && et || qui ne prennent en compte que le premier élément de chaque opérande (dans votre cas seulement la première ligne de votre tableau).
PY

Patricia OBEID
Messages : 68
Enregistré le : 10 Avr 2017, 19:03

Re: Syntaxe OU

Messagepar Patricia OBEID » 10 Mar 2018, 15:59

Merci Pierre-Yves.
c'est vrai que l'exemple répond en grande partie à ma question (ce sont des calculs que j'utilise peu et c'est vrai que j'ai oublié cette question ... Désolée).
Reste un problème pour la condition où j'utilise le OU et non le ET.
Comment l'écrire ?

data1$Attention <- 0 #la colonne est bien à zéro partout
data1$Attention[data1$GCQ < 0.4 & data1$RefCQ <0.4] <- "ok" # ok apparait là où il faut
data1$Attention[data1$GCQ >= 0.4 || data1$RefCQ <= 0.4] <- "Redo" # toute la colonne a la valeur Redo pourtant la 1ère ligne répond à la
condition ok

merci de votre aide,
Patricia

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

Re: Syntaxe OU

Messagepar Eric Casellas » 12 Mar 2018, 08:55

Patricia OBEID a écrit :Reste un problème pour la condition où j'utilise le OU et non le ET.
Comment l'écrire ?
...
data1$Attention[data1$GCQ >= 0.4 || data1$RefCQ <= 0.4] <- "Redo" # toute la colonne a la valeur Redo pourtant la 1ère ligne répond à la


Bonjour,

tu utilise un | de trop...

Eric
Eric

Patricia OBEID
Messages : 68
Enregistré le : 10 Avr 2017, 19:03

Re: Syntaxe for / if

Messagepar Patricia OBEID » 12 Mar 2018, 10:51

Merci Eric !
le problème venait bien de là.
Peux tu préciser quand il faut employer 1 seul | et quand il faut en utiliser deux ?
Bonne journée,
Patricia

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

Re: Syntaxe for / if

Messagepar Logez Maxime » 12 Mar 2018, 13:33

Bonjour,

Tu utilises un seul "|" quand tu veux établir plein de comparaisons deux à deux, par exemple comparer les valeurs de deux vecteurs.
Tu utilises deux "|" quand ta comparaison ne porte que sur des vecteurs d'une seule valeur, quand il n'y a qu'une condition de chaque côté du "||".

Code : Tout sélectionner

x1 <- rbinom(3, 1, .5)
x2 <- rbinom(3, 1, .5)

x1|x2
[1]  TRUE FALSE FALSE

TRUE || FALSE
[1] TRUE

# si tu utilises le "||" alors que tu as plusieurs valeurs à comparer seule la première est comparée
x1||x2
[1] TRUE
Cordialement,
Maxime

Patricia OBEID
Messages : 68
Enregistré le : 10 Avr 2017, 19:03

Re: Syntaxe for / if

Messagepar Patricia OBEID » 12 Mar 2018, 15:18

Merci Maxime pour ces précisions.
Patricia

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

Re: Syntaxe for / if

Messagepar Pierre-Yves Berrard » 12 Mar 2018, 15:25

Pour peaufiner, comme on a deux conditions qui s'excluent l'une l'autre, on peut aussi utiliser la fonction ifelse pour s'épargner d'écrire le complémentaire logique :

Code : Tout sélectionner

data1$Attention <- ifelse(data1$GCQ < 0.4 & data1$RefCQ < 0.4, "ok", "Redo")
PY

Patricia OBEID
Messages : 68
Enregistré le : 10 Avr 2017, 19:03

Re: Syntaxe for / if

Messagepar Patricia OBEID » 12 Mar 2018, 15:54

Cool !
Merci beaucoup Pierre-Yves, il est toujours utile de réduire le nombre de lignes de codes.
Patricia


Retourner vers « Questions en cours »

Qui est en ligne

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

cron