cbind

Questions sur les objets de R et la manipulation des données

Modérateur : Groupe des modérateurs

Pierre Heisserer
Messages : 4
Enregistré le : 05 Mai 2006, 07:45

cbind

Messagepar Pierre Heisserer » 05 Mai 2006, 07:51

bonjour,

je souhaiterais savoir si il est possible, en utilisant la fonction cbind, de ne pas recoder les valeurs comprises donc les colones d'origine.

Merci d'avance à tous.

Pierre

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 05 Mai 2006, 11:37

Bonjour Pierre,

Je ne comprends pas votre question. Peut-être voulez-vous parler de rbind et non de cbind ? Un exemple concret permettrait de clarifier les choses.

Renaud

Pierre Heisserer
Messages : 4
Enregistré le : 05 Mai 2006, 07:45

Messagepar Pierre Heisserer » 05 Mai 2006, 11:49

bonjour,
je parle bien de cbind

exemple :
jour

lundi
mardi
mercredi
...

vent

calme
fort
calme
...

avec cbind(jour,vent) j 'obtient

1 1
2 2
3 1

alors que je souhaiterais :

lundi calme
mardi fort
mercredi calme

merci d avance,

Pierre

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 05 Mai 2006, 12:04

Pas chez moi:

Code : Tout sélectionner

> jour <- c("lundi", "mardi", "mercredi")
> vent <- c("calme", "fort", "calme")
>
> cbind(jour,vent)
     jour       vent   
[1,] "lundi"    "calme"
[2,] "mardi"    "fort"
[3,] "mercredi" "calme"


Si les éléments fournis à cbind sont des vecteurs, le résultat de cbind est une matrice (comme ci-dessus), dont toutes les colonnes doivent être de même mode (numérique ou caractére). Or, un facteur est un objet de mode numérique.

Code : Tout sélectionner

> jour <- c("lundi", "mardi", "mercredi")
> mode(jour)
[1] "character"
> jour <- factor(c("lundi", "mardi", "mercredi"))
> mode(jour)
[1] "numeric"

Donc, quand vous combinez deux facteurs, la matrice résultante est une matrice numérique, ce qui explique probablement le comportement dont vous parlez.

Code : Tout sélectionner

> vent <- factor(c("calme", "fort", "calme"))
>
> cbind(jour,vent)
     jour vent
[1,]    1    1
[2,]    2    2
[3,]    3    1



Deux possibilités (au moins) pour résoudre votre problème:

1. Travailler avec des vecteurs de chaînes de caractères comme au début de ce message.

2. Utiliser un data.frame plutôt qu'une matrice: vous pouvez mélanger des vecteurs de différents modes dans un data.frame:

Code : Tout sélectionner

> data.frame(jour, vent)
      jour  vent
1    lundi calme
2    mardi  fort
3 mercredi calme


Je pense que la seconde solution est mieux appropriés dans la plupart des cas.

Bien cordialement,

Renaud

Pierre Heisserer
Messages : 4
Enregistré le : 05 Mai 2006, 07:45

Messagepar Pierre Heisserer » 05 Mai 2006, 12:09

Yes !!
merci beaucoup Renaud
j ai utilisé votre deuxieme methode.
qui fonctionne tres bien.
je suis novice en R, j'ai encor du mal avec les notions de base tel que les data frame.

encor merci pour votre aide

Pierre


Retourner vers « Archives : Manipulation de données avec R »

Qui est en ligne

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

cron