extraction tableau selon une variable qualitative et critère logique

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

Charline Fisseau
Messages : 29
Enregistré le : 07 Avr 2016, 06:39

extraction tableau selon une variable qualitative et critère logique

Messagepar Charline Fisseau » 20 Avr 2016, 10:36

Bonjour,

j'ai un tableau de la forme suivante :
gisement heure-comptage heureBM hauteur coef Jour activite
A 08:30 08:27 1,01 94 5 5 algpro
A 12:44 13:05 1,59 68 4 5 algpro
A 08:35 09:10 1,12 86 6 5 algpro
A 10:37 10:55 1,49 72 2 6 algpro
A 20:25 21:17 0,86 98 7 6 algpro
B 13:15 13:53 1,58 64 6 6 vers
B 11:23 11:38 1,73 65 5 7 vers

Une ligne = un comptage

Je souhaite sélectionner une partie du tableau dans lequel chaque gisement compte plus de 25 comptages par activité.
Donc je veux que le nombre de ligne de la variable " gisement" pour le gisement A et une activité soit supérieur à 25. J'ai 104 gisements et 80 activités...
J'ai essayé plusieurs fonctions dont nrow mais cela ne fonctionne pas . Je suis un peu bloquée..

Merci de votre aide

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

Re: extraction tableau selon une variable qualitative et critère logique

Messagepar Gabriel Terraz » 20 Avr 2016, 10:55

Salut,
Voici une proposition si j'ai bien tout compris.

Jeu de données bidon :

Code : Tout sélectionner

df <- data.frame(gisement = rep(LETTERS[1:3],c(2:4)), autre = rnorm(9))
df
  gisement      autre
1        A -0.4652853
2        A  0.5120446
3        B -1.4315413
4        B  1.5861620
5        B -0.1290518
6        C -1.3276459
7        C  0.6535332
8        C  0.4715570
9        C  1.6665272


Puis on compte les occurences des gisements :

Code : Tout sélectionner

tab <- table(df$gisement)
tab
A B C
2 3 4

Et enfin :

Code : Tout sélectionner

df[df$gisement %in% names(tab)[tab > 3],]
  gisement      autre
6        C -1.3276459
7        C  0.6535332
8        C  0.4715570
9        C  1.6665272

Charline Fisseau
Messages : 29
Enregistré le : 07 Avr 2016, 06:39

Re: extraction tableau selon une variable qualitative et critère logique

Messagepar Charline Fisseau » 20 Avr 2016, 12:33

Bonjour,

merci beaucoup je pense que votre script a fonctionné comme je voulais !
Je ne connaissais pas %in% names, à quoi cela correspond ?

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

Re: extraction tableau selon une variable qualitative et critère logique

Messagepar Gabriel Terraz » 20 Avr 2016, 12:53

La fonction est "%in%" et non "%in% names" ; elle sert à tester si les éléments du vecteur de gauche (ici les gisements) se trouvent dans le vecteur de droite.
Le vecteur de droite est ici le nom des modalités qui sont présentes plus de 3 fois (comptées grâce à la commande table).

Florent Aubry
Messages : 324
Enregistré le : 25 Juin 2010, 10:21

Re: extraction tableau selon une variable qualitative et critère logique

Messagepar Florent Aubry » 20 Avr 2016, 14:02

Il existe une fonction subset qui permet de faire des sélections complexes. Pour le problème posé, elle ne simplifie que peu l'écriture de la solution de Gabriel mais quand le critère est beaucoup plus complexe, cela rend le code plus lisible. Cela donne

Code : Tout sélectionner

subset( df, gisement %in% names( tab)[tab > 3])

Charline Fisseau
Messages : 29
Enregistré le : 07 Avr 2016, 06:39

Re: extraction tableau selon une variable qualitative et critère logique

Messagepar Charline Fisseau » 20 Avr 2016, 14:13

D'accord ok merci beaucoup Florent .

Du coup ça fonctionne très bien !

Je souhaite faire 3 groupes de gisements. Par exemple le groupe 1 comprendra les données des 13 premiers gisements etc..
J'utilise la fonction "subset" comme ceci :

data$gisement1=subset(data,gisement=="1"|sitep=="2"|sitep=="3"|sitep=="4"|sitep=="5"|sitep=="6"|sitep=="7"|sitep=="8"|sitep=="9"|sitep=="25"|sitep=="28"|sitep=="32"|sitep=="33")

J'ai le message d'erreur suivant : Error in `$<-.data.frame`(`*tmp*`, "gisement1", value = list(X = c(53641L, :
replacement has 2705 rows, data has 9050

Je ne comprends pas pourquoi ça ne fonctionne pas, et comment je peux automatiser en lui disant tu prends les 13 premiers gisements?
MERCIII !!

Florent Aubry
Messages : 324
Enregistré le : 25 Juin 2010, 10:21

Re: extraction tableau selon une variable qualitative et critère logique

Messagepar Florent Aubry » 20 Avr 2016, 14:35

1) subset renvoie un data.frame :

Code : Tout sélectionner

data.frame.resultat <- subset( data.frame.origine, condition.de.selection)

donc renvoyer le résultat dans une colonne du data.frame d'origine pose des problèmes.

2) le code de sélection est faux ; si je comprends ce que tu cherches est de dire que les sitep compris dans la série de valeurs c( "2", "3", "4", "5", "6", "7", "8", "9", "25", "28", "32", "33") correspondent au gisement 1, etc. en créant une colonne gisement. Si c'est le cas, tu peux utiliser la fonction transform avec ifelse :

Code : Tout sélectionner

data <- transform( data, gisement=ifelse( sitep %in% c( "2", "3", "4", "5", "6", "7", "8", "9", "25", "28", "32", "33"), "1", ifelse( sitep %in% valeurs.pour.gisement.2, "2", "3")))

Charline Fisseau
Messages : 29
Enregistré le : 07 Avr 2016, 06:39

Re: extraction tableau selon une variable qualitative et critère logique

Messagepar Charline Fisseau » 20 Avr 2016, 14:55

Ah oui d'accord je comprends pourquoi ça ne fonctionne pas.

Oui c'est bien cela j'essaie la fonction transform. Comment je pourrais faire pour sélectionner les 13 premiers gisements sans les nommer "2" "3" etc.. ?

Charline Fisseau
Messages : 29
Enregistré le : 07 Avr 2016, 06:39

Re: extraction tableau selon une variable qualitative et critère logique

Messagepar Charline Fisseau » 20 Avr 2016, 15:10

J'ai tapé le code suivant mais cela ne fonctionne pas je pense que c'est la fin de la boucle if qui n'est pas correcte.

dt.dat_moule <- transform (dt.dat_moule, sitep=ifelse( sitep %in% c( "2", "3", "4", "5", "6", "7", "8", "9", "25", "28", "32", "33"), "sitep1", ifelse( sitep %in% c( "34","39","41","42","43","50","62","67","68","69","71","72","76"), "sitep2", ifelse (sitep %in% c("81","82","83","84","85","86","87","99","100","101","102","103","104"),"sitep3"))))

Florent Aubry
Messages : 324
Enregistré le : 25 Juin 2010, 10:21

Re: extraction tableau selon une variable qualitative et critère logique

Messagepar Florent Aubry » 20 Avr 2016, 15:43

Le ifelse a trois arguments : la condition, la valeur si la condition est vraie et celle si elle est fausse. Le code est donc :

Code : Tout sélectionner

ifelse( sitep %in% c( "2", "3", "4", "5", "6", "7", "8", "9", "25", "28", "32", "33"), "sitep1",
            ifelse( sitep %in% c( "34","39","41","42","43","50","62","67","68","69","71","72","76"), "sitep2", "sitep3")
)

Charline Fisseau
Messages : 29
Enregistré le : 07 Avr 2016, 06:39

Re: extraction tableau selon une variable qualitative et critère logique

Messagepar Charline Fisseau » 20 Avr 2016, 16:00

Oui merci, si je ne met pas de condition si faux ça va pas le faire c'est sur!
Merci beaucoup heureusement que vous êtes là pour ces petits trucs sur lesquels on peut bloquer et perdre du temps!

Mais du coup j'ai une dernière question, si je veux extraire que les données se rapportant aux "sitep1" mais ça ne fonctionne pas non plus avec la fonction subset ...

dat$sitep1= subset(dt.dat_moule, sitep=="sitep1")

Le meme message d'erreur s'affiche.. "Error in `$<-.data.frame`(`*tmp*`, "sitep1", value = list(X = integer(0), :
replacement has 0 rows, data has 9050"

Florent Aubry
Messages : 324
Enregistré le : 25 Juin 2010, 10:21

Re: extraction tableau selon une variable qualitative et critère logique

Messagepar Florent Aubry » 21 Avr 2016, 07:13

dat$sitep1= subset(dt.dat_moule, sitep=="sitep1")

Le meme message d'erreur s'affiche.. "Error in `$<-.data.frame`(`*tmp*`, "sitep1", value = list(X = integer(0), :
replacement has 0 rows, data has 9050"


Comme je l'ai dit plus haut, subset renvoie un data.frame donc, soit dat a été précédemment déclaré comme une liste et l'instruction fonctionne (Note : il est nécessaire que cette déclaration ait eu lieu), soit dat est un data.frame (ce qui est manifestement le cas vu le message d'erreur), et comme je l'ai déjà mentionné, cette affectation est impossible.

Charline Fisseau
Messages : 29
Enregistré le : 07 Avr 2016, 06:39

Re: extraction tableau selon une variable qualitative et critère logique

Messagepar Charline Fisseau » 21 Avr 2016, 10:20

Oui oui d'accord c'est effectivement un data frame! Mais comment extraire uniquement un tableau de données du sitep1 et pas celle du sitep2 ?

Florent Aubry
Messages : 324
Enregistré le : 25 Juin 2010, 10:21

Re: extraction tableau selon une variable qualitative et critère logique

Messagepar Florent Aubry » 21 Avr 2016, 10:31

Puisque subset renvoie un data.frame, il suffit de faire :

Code : Tout sélectionner

data.frame.de.site1 <- subset( dt.dat_moule, sitep == "sitep1")


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité

cron