Subset, selection de lignes et colonnes et transformation en NA

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

margot julien
Messages : 46
Enregistré le : 28 Nov 2017, 12:10

Subset, selection de lignes et colonnes et transformation en NA

Messagepar margot julien » 29 Nov 2017, 09:55

Bonjour,

je travaille sur un fichier à 5000 lignes et plus de 50 colonnes et je fais des transformation dessus mais parfois je suis amenée à revenir sur le fichier de base. Jusqu'à maintenant je fais le "nettoyage" via Excel (suppression de colonnes, lignes, certaines variétés..) mais je me rends compte que c'est problématique car je dois revenir modifier mon fichier à chaque fois, j'aimerais donc tout faire par R et si quelqu'un arrive à trouver une façon avec R de faire tout ça d'un coup ça serait magique

Admettons dans un fichier exemple que j'ai 5 colonnes: variete (3 variétés qui reviennent plus ou moins), lieu (avec 5 lieux différents possibles), annee (5 années), taille_fleurs (chiffres en cm) et temperature

je veux creer une subset ou je réalise les 4 opérations suivantes:

R garde uniquement:
- les variétés qui ont au moins 4 valeurs de tailles de fleurs (donc ou le nom de la variété va revenir au moins 4 fois sur toutes les lignes de la colonne variete)

-les lignes pour 3 lieux A, B, C (sur 5 lieux présents dans la colonne "lieu") donc je surprime les lignes correspondantes au lieu D et E

J'ai aussi des valeurs à -9999 et j'aimerais les remplacer par des "NA" dans la colonne temperature

Finalement dans ce subset j'aimerais aussi supprimer toutes les lignes correspondant à l'année 1994 (1994 dans la colonne année)

et puis stocker ce subset dans un fichier csv.

Je joins le tableau du fichier ci-dessous en exemple (je ne sais pas si on peut joindre les fichiers excel sur votre forum?), est-ce que vous pourriez me donner des lignes de codes pour réaliser ce subset avec cet exemple afin que je puisse le faire avec mon vrai fichier de 5000 lignes?

Merci par avance.
Cordialement.

[list=]
variete lieu anne taille_fleurs temperature
var1 A 1900 10 NA
var1 B 1900 11 2
var1 C 1900 12 3
var2 A 1900 13 4
var1 D 1900 14 5
var1 D 1900 15 -9999
var3 A 1900 16 7
var3 B 1900 17 8
var3 C 1900 18 9
var3 D 1900 19 10
var4 A 1900 20 11
var1 A 1991 21 12
var1 B 1991 22 13
var1 C 1991 23 14
var1 D 1991 24 15
var1 A 1992 25 16
var1 B 1992 26 -9999
var1 C 1992 27 18
var1 D 1992 28 19
var1 A 1993 29 20
var1 B 1993 30 21
var1 C 1993 31 22
var1 D 1993 32 23
var1 A 1994 33 24
var1 B 1994 34 25
var1 C 1994 35 26
var1 D 1994 36 27
var1 E 1900 37 28
var2 E 1991 38 29
var3 E 1992 39 30
var4 E 1993 40 31
[/list]

Gabriel Terraz
Messages : 591
Enregistré le : 26 Sep 2011, 15:11

Re: Subset, selection de lignes et colonnes et transformation en NA

Messagepar Gabriel Terraz » 29 Nov 2017, 17:28

Salut,

Quand tu veux sélectionner des lignes de ton dataframe selon plusieurs conditions, je te conseille d'écrire ces conditions une à une, puis de faire une sélection finale :

Code : Tout sélectionner

## Condition 1 :
tt <- table(tab$variete)
c1 <- tab$variete %in% (names(tt)[tt > 5])


Code : Tout sélectionner

## Condition 2 :
c2 <- tab$lieu %in% c("A","B", "C")


## Condition 3 :
c3 <- tab$anne != 1994

Et enfin :

Code : Tout sélectionner

tabsubset <- tab[c1 & c2 & c3,]
tabsubset$temperature[tabsubset$temperature == -9999] <- NA


Puis :

Code : Tout sélectionner

write.table(tabsubset...) ## À toi de choisir tes options qui te conviennent le mieux

margot julien
Messages : 46
Enregistré le : 28 Nov 2017, 12:10

Re: Subset, selection de lignes et colonnes et transformation en NA

Messagepar margot julien » 30 Nov 2017, 08:23

Bonjour,

merci pour la réponse. Je vais tester d'écrire avec les conditions une à une.

Et juste, pour remplacer les signes "-9999" mais aussi par exemple des "/" ou "?" dans tous les fichier et pas uniquement une colonne, je peux faire:

tabsubset[tabsubset == -9999] <- NA
tabsubset[tabsubset == "/"] <- NA
tabsubset[tabsubset == "?"] <- NA

est-ce que je dois mettre les guillemets pour les "/" et "?" ?

Merci.

Bonne journée.

Margot.

margot julien
Messages : 46
Enregistré le : 28 Nov 2017, 12:10

Re: Subset, selection de lignes et colonnes et transformation en NA

Messagepar margot julien » 20 Déc 2017, 13:27

Bonjour,

j'ai une autre question. Si parmi toutes mes colonnes je veux supprimer certaines colonnes en utilisant le nom de la colonne, comment faire?

J'ai trouvé cette solution:

Code : Tout sélectionner

test <- test[ , - c(12, 2,5,8,9,30,31,35,36)]


je supprime les colonnes par leur numéro mais cela n'est pas pratique car si je retouche au fichier Excel de base le numéro de la colonne va changer, j'aimerais donc utiliser les noms afin de sélectionner plusieurs colonnes à retirer, une idée?

j'ai testé avec des guillemets mais cela ne fonctionne pas:

Code : Tout sélectionner

> test <- test[ , - c("variete")]

Error in -c("variete") : invalid argument to unary operator


Merci par avance.

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Subset, selection de lignes et colonnes et transformation en NA

Messagepar Pierre-Yves Berrard » 20 Déc 2017, 13:39

Bonjour,

Tu peux utiliser la fonction subset qui offre deux fonctionnalités assez pratiques :
  • ne pas avoir à répeter test$ devant chaque variable pour le sélection des lignes
  • pouvoir écrire -c(variete, taille) pour la sélection des colonnes (attention, pas de guillemets)
Exemple :

Code : Tout sélectionner

test <- subset(test, select = -variete)
PY

margot julien
Messages : 46
Enregistré le : 28 Nov 2017, 12:10

Re: Subset, selection de lignes et colonnes et transformation en NA

Messagepar margot julien » 21 Déc 2017, 08:15

Bonjour,

Merci beaucoup, très pratique ce "select" et le fait de pouvoir lister les colonnes à enlever sur la même ligne est également un gain de temps.

Bonne journée.


Retourner vers « Questions en cours »

Qui est en ligne

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