séparer les variables d'un factor

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

claire migne
Messages : 7
Enregistré le : 02 Avr 2007, 15:59

séparer les variables d'un factor

Messagepar claire migne » 03 Avr 2007, 10:53

bonjur a tous,

j'ai une variable pays, pour l'etude d'un fichier census,
et j'aimerai bien séparer mes données en deux catégories, ceux pour lesquelles le pays est etats unis, et tous les autres.

en fait si on prend un autre exemple: celui des fumeurs ou non fumeurs.
on cree d'abord le facteur et puis en utilisant la fonction split sur l'attribut, on divise l'echantillon

la je n'arrive pas a voir comment le faire, mettre les 41 variables d'un coté et Etats Unis de l'autre

merci d'avance pour votre aide

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 03 Avr 2007, 11:09

si tu as un tableau nommé tab et ton facteur nommé pays intégré à ce tableau c'est àdire que pays est une colonne de tab. Et disons que tu codes EU pour états unis et NEU pour non états-unis), alors tu as:

pour avoir les lignes pour lesquelles le tableau est états unis :

Code : Tout sélectionner

tab_EU=tab[tab$pays=='EU',]


Pour les autres :

Code : Tout sélectionner

tab_NEU=tab[tab$pays=='NEU',]
#equivalent à:
tab_NEU=tab[tab$pays!='EU',]


Donc la seule condition,est d'avoir l'information 'pays' pour chacune des lignes de ton tableau autrement dit la longueur de ton factueur pays doit être égale au nombre de ligne de ton tableau
La fonction split a besoin également d'un facteur de même longeur que ce que tu veux diviser en différente partie. Mais le problème est que je crois que split te donne un objet de type 'list' en sortie. Ces derniers ne sont pas forcément très pratique à utiliser lorsqu'on débute sous R car il nécessitent l'emploi de fonctions particulières pour être performant.

claire migne
Messages : 7
Enregistré le : 02 Avr 2007, 15:59

Messagepar claire migne » 03 Avr 2007, 11:32

merci beaucoup!

je vais essayer de faire comme vous avez dit

mon but final est de creer un tableau de contingence avec la variable pays et richesse , pour voir si globalement les americains sont plus riches que les gens provenant d'autre pays

mon tableau s'appelle census
et j'ai bien une colonne country

donc j'ecris

census_EU= census[census$country== "United-States", ]
ca me renvoir comme ca toutes les lignes pour lesquelles la variable country est United sates

et ensuite j'ai

census_NEU= census[census$country!=" United-States, ]

mais la je fais juste un renvoi de lignes pour lesquelles le pays est US ou non , mais comment je peux tracer mon mosaicplot? je suis un peu confuse la excusez moi :oops:


edit: excusez moi, ahh je viens de comprendre ce que vous voulez dire

mais j'ai 42 pays! donc je doid faire le remplacement manuel pour tous avec votre methode , ok je vais faire comme ca

claire migne
Messages : 7
Enregistré le : 02 Avr 2007, 15:59

Messagepar claire migne » 03 Avr 2007, 11:36

excusez moi pour le double post mais c'est comme lorsuqe on a une colonne avec des ? et que l'on dit que tous les ? , on les remplace par des NA. et ensuite les NA peuvent etre enlevés avec is.na ou d'autres fonctions

Sébastien Boutry
Messages : 12
Enregistré le : 16 Nov 2006, 10:50

Messagepar Sébastien Boutry » 03 Avr 2007, 11:50

pour enlever les Na dans un tableau il y a la fonction na.omit()

Seb

claire migne
Messages : 7
Enregistré le : 02 Avr 2007, 15:59

Messagepar claire migne » 03 Avr 2007, 11:52

oui, mais dans le cas des pays, le fait de séparer les UNited States de tous les autres, il n'y a pas de méthode plus simple que remplacer les 41 pays par others manuellement?

merci,

claire migne
Messages : 7
Enregistré le : 02 Avr 2007, 15:59

Messagepar claire migne » 03 Avr 2007, 12:00

en fait j'ai constaté que si j'écris par exemple

Code : Tout sélectionner


censusA=split(census, census$country)


alors ca me renvoie une séparation selon tous les pays, et apres par exemple je peux faire un

Code : Tout sélectionner


lapply(censusA, summary)


en fait j'aimerai faire exactement la meme chose mais en ayant pas tous les pays chacun , mais US tout seul et les autres en quelque sortes agrégés

Sébastien Boutry
Messages : 12
Enregistré le : 16 Nov 2006, 10:50

Messagepar Sébastien Boutry » 03 Avr 2007, 12:07

juste pour savoir tu as tes données dans quel format

par exemple:
> var1=c("EU","EU","FR","SUI","EU")
> var1
[1] "EU" "EU" "FR" "SUI" "EU"
> a=(1:length(var1))[var1=="EU"]
> a
[1] 1 2 5
> b=(1:length(var1))[var1!="EU"]
> b
[1] 3 4
donc après
> var1[b]="others"
> var1
[1] "EU" "EU" "others" "others" "EU"

je sais pas si ma réponse va t'aider

voila

claire migne
Messages : 7
Enregistré le : 02 Avr 2007, 15:59

Messagepar claire migne » 03 Avr 2007, 14:59

merci pour votre aide, je sens que je commence a mieux comprendre, mais je n'arrive pas a le faire

en fait mes données dont dans un fichier csv de 48 884 lignes
j'ai essaye de faire comme vous avez proposé mais j'ai une erreur qui est renvoyée

en fait si on peut résumer, je voudrais tranformer une variable qualitative (facteur) qui a 42 levels, en une variable qualitative qui n'en a plus que deux US et others

je vais continuer a chercher,

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

Messagepar Logez Maxime » 03 Avr 2007, 16:14

Bonjour,


tu peux très bien crée un facteur US contre le reste du monde avec la fonction ifelse :

Code : Tout sélectionner

pays <- sample(c("US","FRA","ESP","BRE"),20,rep=T)
pays
 [1] "US"  "ESP" "US"  "ESP" "FRA" "BRE" "US"  "BRE" "US"  "BRE" "FRA" "BRE" "BRE" "FRA" "FRA" "BRE" "ESP" "ESP" "FRA" "FRA"
fac <- as.factor(ifelse(pays=="US","US","other"))
fac
US    other US    other other other US    other US    other other other other other other other other other other other
# pour vérifier que ça marche :
table(pays,fac)
     fac
pays  other US
  BRE     6  0
  ESP     4  0
  FRA     6  0
  US      0  4
tu auras ainsi crée un facteur US contre le reste du monde et tu peux utiliser la fonction lapply après un split ou utiliser des fonctions comme tapply tout dépend de ce que tu veux faire.

Maxime

claire migne
Messages : 7
Enregistré le : 02 Avr 2007, 15:59

Messagepar claire migne » 03 Avr 2007, 16:26

ooo merci mille fois, je ne connaissais pas la fonction iselse! merci beaucoup maxime, ca marche !!!!!

et le as.factor c'est pour forcer la conversion en factor

ok je suis très très contente , je peux faire mon mosaicplot maintenant

a bientot et merci encore


Retourner vers « Questions en cours »

Qui est en ligne

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