variable en chaîne de caractères

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

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

variable en chaîne de caractères

Messagepar Stéphane Laurent » 26 Juil 2012, 13:35

Bonjour,

Sauriez-vous résoudre le problème illustré par ce bout de code :

Code : Tout sélectionner

> library(rgr)
>
> ( dat <- data.frame(A=1:5, B=factor(LETTERS[5:1])) )
  A B
1 1 E
2 2 D
3 3 C
4 4 B
5 5 A
>
> # ce que je veux faire :
> gx.sort.df(~B, dat)
  A B
5 5 A
4 4 B
3 3 C
2 2 D
1 1 E
>
> # mais je veux le faire pour plusieurs variables
> # sans réécrire le code à chaque fois
>
> gx.sort.df(~"B", dat) # ceci marche
  A B
5 5 A
4 4 B
3 3 C
2 2 D
1 1 E
>
> # on est alors naïvement tenté de croire que ceci va marcher mais non :
> mavariable <- "B"
> gx.sort.df(~mavariable, dat)
Error in `[.data.frame`(dfname, , vars[i]) : undefined columns selected
>
> # dommage car ce serait parfait
> # certes quand on y pense c'est normal que ça ne marche pas mais alors comment faire ?

Pierre Bady
Messages : 405
Enregistré le : 02 Mai 2006, 07:46

Messagepar Pierre Bady » 26 Juil 2012, 13:44

bonjour,


le première argument est un objet de type formula. On peut générer un nouvelle formule avec les fonctions paste et as.formula.

Code : Tout sélectionner

R>  dat <- data.frame(A=1:5, B=factor(LETTERS[5:1]))
R> mavariable <- "B"
R> gx.sort.df(as.formula(paste("~",mavariable,sep="")), dat)
  A B
5 5 A
4 4 B
3 3 C
2 2 D
1 1 E
R>





hth

pierre
=@===--------¬-------¬------¬-----¬
liens utiles :
http://www.gnurou.org/Writing/SmartQuestionsFr
http://neogrifter.free.fr/welcomeOnInternet.jpg
]<((((*< -------------------------------

Maxime Hervé
Messages : 427
Enregistré le : 03 Mar 2010, 14:21
Contact :

Messagepar Maxime Hervé » 26 Juil 2012, 13:45

Comme ça ?

Code : Tout sélectionner

(dat <- data.frame(A=1:5, B=factor(LETTERS[5:1])))
  A B
1 1 E
2 2 D
3 3 C
4 4 B
5 5 A

dat[order(dat$B),]
  A B
5 5 A
4 4 B
3 3 C
2 2 D
1 1 E

mavariable <- "B"

dat[order(dat[,mavariable]),]
  A B
5 5 A
4 4 B
3 3 C
2 2 D
1 1 E

Maxime

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 26 Juil 2012, 13:48

Arf ouais merci, je kiffe tellement gx.sort.df() que j'avais banni de mon existence la bonne vieille méthode :)

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 26 Juil 2012, 13:49

Je n'avais pas vu la réponse de Pierre. Ca marche aussi. Merci à vous.


Retourner vers « Questions en cours »

Qui est en ligne

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