Nous sommes le Dim 20 Juil, 2025 09:00
Supprimer les cookies

Deux petites manip sous R

Sur le logiciel libre en général ou un logiciel libre en particulier

Mer 05 Oct, 2005 17:19

Je me galère sur deux trucs bêtes :

1) Renommer certaines colonnes d'un data.frame. J'ai réussi de la manière suivante :
data$nom.neuf <- data$vieux.nom
data <- data[,-c(data.vieux.nom)]
mais je suis certain qu'il existe plus simple.

2) Effectuer un merge pas plusieurs variables. J'ai des données de panel sur deux data.frame que je ne peux coller directement l'un à l'autre. Il me faut donc effectuer un merge via l'identifiant pays et l'année. Sur ce coup par contre, j'ai rien trouvé.

Au passage, connaissez vous un forum ou un groupe de discussion dédié à R. J'ai eu beau chercher, je n'ai rien trouvé.
playmobil

Avatar de l’utilisateur
Messages : 575
Géo : Clermont-Ferrand

Mer 05 Oct, 2005 20:31

Effectuer un merge pas plusieurs variables.

Il y a une fonction qui s'appelle ... merge. En tapant ? merge dans R, tu verras comment l'utiliser.

Renommer certaines colonnes d'un data.frame

Il me semble que le R "de base" ne propose rien très direct. Il y a une fonction appelée rename.vars, disponible via un package supplémentaire appelé gdata. Ce package est disponible via les dépôts CRAN. Une fois que le package est installé et chargé, tu tapes ? rename.vars dans R ...

Au passage, connaissez vous un forum ou un groupe de discussion dédié à R. J'ai eu beau chercher, je n'ai rien trouvé.

Il y a une mailing list, R-help, dont voici la page d'information: https://stat.ethz.ch/mailman/listinfo/r-help Tu pourras t'inscrire via cette page. Note aussi que tu peux faire des recherches dans les archives de cette liste. Il y a des liens vers des moteurs de recherche sur la page.
hjs

Messages : 532

Mer 05 Oct, 2005 23:07

Bonjour,

pour renommer une colonne il suffit d'utiliser la fonction names().

names(data) renvoie le nom des colonnes d'une data.frame sous la forme d'un vecteur.
names(data)[5] est le nom de la 5ème colonne.

Pour changer le nom de cette colonne par exemple, il suffit de faire :
names(data)[5]<-"nouveau.nom"

Il y a aussi la fonction dimnames() plus générale :
dimnames(data)[[1]] donne le nom des lignes.
dimnames(data)[[2]] donne le nom des colonnes.
dimnames(data)[[2]][5]<-"nouveau.nom" change également le nom de la 5ème colonne.

Pour la fonction merge() je confirme que c'est certainement une solution. Sinon on peut aussi jouer avec la fonction match() mais c'est plus compliqué.

J'espère que ça répond à la question.
Chpat

Messages : 5
Géo : Lille

Jeu 06 Oct, 2005 08:44

Merci pour les réponses. J'avais déjà vu la fonction merge, mais c'est son utilisation qui me pose problème. J'ai essayé un truc du genre :

attach(donnees.1)
attach(donnees.2)
donnees <- merge(x=donnees.1, y=donnees.2, by=c(year,country))

mais il veut pas et me retourne :

Erreur dans fix.by(by.x, x) : 'by' must match numbers of columns
playmobil

Avatar de l’utilisateur
Messages : 575
Géo : Clermont-Ferrand

Jeu 06 Oct, 2005 10:34

Essaie un peu sans le 'by':
Code: Tout sélectionner
donnees = merge(x=donnees.1, y=donnees.2)

Si les variables "year" et "country" sont présentes dans les deux jeux de données, et qu'elles portent exactement le même nom, cela devrait suffire.
hjs

Messages : 532

Jeu 06 Oct, 2005 12:31

Pourquoi faire simple quand on peut faire compliqué...

Ca marche nickel. Merci beaucoup
playmobil

Avatar de l’utilisateur
Messages : 575
Géo : Clermont-Ferrand

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit