9
votes

codage des valeurs variables dans des classes en utilisant r

J'ai un ensemble de données dans lesquelles je dois coder les valeurs de certaines variables (numériques) en 3 classes.

Mon ensemble de données est similaire à celui-ci, mais 60 variables supplémentaires: p>

> data2
   anim    wt SWT
1     1 181.0   1
2     2 179.0   1
3     3 180.5   1
4     4 201.0   2
5     5 201.5   2
6     6 245.0   2
7     7 246.4   2
8     8 189.3   1
9     9 301.0   3
10   10 354.0   3
11   11 369.0   3
12   12 205.0   2
13   13 199.0   1
14   14 394.0   3
15   15 231.3   2


0 commentaires

5 Réponses :


5
votes

Vous pouvez essayer couper xxx

modifier: groupe fixe - droit = ​​false, s'est débarrassé de l'exemple divisé. xxx


5 commentaires

Je crois que j'aurais dû utiliser le terme "codage" au lieu de "casser", ce qui signifie que je dois coder WT = 179 <200 comme 1; WT = 200 <300 AS 2 et WT> 300 AS 3. Désolé pour mon erreur!


@baz - J'ai ajouté le code pour ajouter le groupe. Vous pouvez regarder le paramètre droit pour inclure le côté gauche ou droit de l'intervalle. Je pense que mon paramètre gauche / droit est désactivé de votre exemple.


@baz - Je pense que mon cadre de données correspond à la vôtre maintenant.


J'imagine Labels = false est préféré sur as.numeric () pour ceux qui se font travailler sur de telles choses.


Et si j'ai besoin de diviser ma variable WT en 3 groupes de taille égale ou une variable continue de cette affaire



12
votes

La méthode CUT code> telle que décrite par @greg est probablement ce que vous voulez ici. Une chose à noter est que couper code> renvoie un facteur par défaut, que vous pouvez supprimer en fournissant étiquettes = false code> pour renvoyer les valeurs entier:

data$group2 <- with(data, ifelse(wt >= 179 & wt < 200, 1, 
  ifelse(wt >= 200 & wt < 300, 2, 3))
)


8 commentaires

Bon point sur les étiquettes. Je viens de le jeter à un numéro numérique avec as.numérique pour obtenir des valeurs de groupe entier.


@Greg - J'imagine que c'est six en une, 1/2 douzaine de l'autre. En fait, je n'ai pas réalisé CUT retournerait les valeurs numériques jusqu'à ce qu'elles examinent le fichier d'aide pour la question. J'ai toujours utilisé la méthode as.numeric () ...


@Chase: J'admets que ce que Greg a fourni des œuvres, je dirai également que ce que vous avez suggéré permet de contrôler plus de contrôle et peut aussi être la flexibilité.


@baz - Je trouve ifelse plus utile lorsque je dispose de nouvelles variables basées sur 2 ou plus de variables existantes ... I.e si "lundi et pluvieux", alors "ne sors pas de lit"


@baz, @chase - Les déclarations d'Ifelle imbriquées sont excellentes pour 3 groupes. Mais si vous avez 20 groupes, cela peut devenir difficile à manier.


@ Chase, @ greg: j'aime toujours utiliser Ifelse mais je ne suis pas vraiment confiant lorsque vous utilisez 2 variables ou plus pour en obtenir une nouvelle. Maintenant, je crois que j'ai cette confiance. Merci beaucoup de gars!


@baz: Pour la performance, vous feriez mieux de nidifier trop de viases. CUT est conçu pour le faire pour vous, alors utilisez-le.


@Chase: toujours sur le même exemple: au lieu de mettre une plage pour chaque niveau, j'ai juste besoin de diviser en 3 groupes de taille égale.



2
votes

Je pense que les réponses de Greg couvrir la "procédure d'exploitation standard", mais je trouve également de nombreuses utilisations de la fonction FindInterval. Il renvoie naturellement un nombre qui identifie l'intervalle dans le deuxième argument.

 data$int <- findInterval(data$wt, c(179, 200, 300, Inf))
 data


0 commentaires

1
votes

Juste pour montrer une méthode alternative (similaire à recoder dans SPSS) à partir d'un package voiture :

> data$SWT <- with(data, recode(wt, "lo:200=1; 300:hi=3; else=2"))
> data
   anim    wt SWT
1     1 181.0   1
2     2 179.0   1
3     3 180.5   1
4     4 201.0   2
5     5 201.5   2
6     6 245.0   2
7     7 246.4   2
8     8 189.3   1
9     9 301.0   3
10   10 354.0   3
11   11 369.0   3
12   12 205.0   2
13   13 199.0   1
14   14 394.0   3
15   15 231.3   2


1 commentaires

J'utilise également la voiture de paquet dans certains de mes travaux de recodage sur des variables catégoriques telles que: DF $ NEWVAR <- RECODE (DF $ $ OLDVAR, "C (1) = 2; C (0) = 1") mais n'a jamais utilisé varibes continues. Merci pour ça!



0
votes

Juste pour l'exhaustivité et les informations, le package clastand (sur Cran) est un autre moyen pratique de classer les chiffres dans les classes.


0 commentaires