Obtenir les attributs lignes d'un dataframe

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

antoine le gal
Messages : 8
Enregistré le : 29 Mar 2017, 22:30

Obtenir les attributs lignes d'un dataframe

Messagepar antoine le gal » 01 Juin 2017, 13:22

Bonjour,

Je dispose d'un data.frame df de 5 lignes et 10 colonnes, avec des attributs lignes spécifiés (mais pas d'attributs colonnes), appelés RC, RS, HC, HS, et P.

Code : Tout sélectionner

df <- structure(c(0.509068836017064, 0.469590849775198, -2.23422707113139,
-0.754328265473029, 0.190010450193631, 1.1351889433319, 1.54046083830484,
-1.57116618493382, -0.631968977175426, 0.612706390286278, 0.886302357957796,
0.815422499638323, -1.9155965311835, -0.723716520151043, 0.449004449456353,
1.33902989879994, 1.39849344953451, -1.1145864201429, -0.899489070267687,
1.03395998298171, 10.6635900286075, 13.3052962246039, 0.189265657741038,
-61.243969438149, -2.07424819450627, 43.3794674642899, 2.22405741371525,
-136.289197752111, -0.957575324201989, 0.0220830639905365, -0.367543983462402,
-0.543669778723039, -1.08966627048416, -0.968906529993855, -0.601376729729406,
3.44944810360242, 1.68900587957809, -12.5012904936284, -0.734495683828959,
1.01451823286437, 19.3809317037583, 7.68883694082401, -20.2436535859753,
-0.231201318882089, 1.39510024366405, 1.3572004295403, 2.3176678784142,
-0.694146463542618, -3.2664029555154, 0.970453027891971), .Dim = c(5L,
10L), .Dimnames = list(c("RC", "RS", "HC", "HS", "P"), NULL))


Mon objectif est :

Pour chaque colonne de df, je désire sa valeur minimale, l'indice de cette valeur minimale, et si possible son attribut ligne.

Pour un exemple sur mon df :

Si je prends la colonne 1, le minimum est -2.2342271, c'est-à-dire df[3,1].

Je voudrais aussi récupérer l'indice ligne correspondant (c'est-à-dire 3), ou bien l'indice absolu dans df (3, pour 3ème valeur contenue dans df), voire mieux encore l'attribut ligne correspondant dans df, c'est-à-dire "HC".

Puis répéter l'opération pour chaque colonne de df.

Un peu naïvement j'ai essayé :

Code : Tout sélectionner

which(df==apply(df, 2, min))


Ce qui me renvoie :

Code : Tout sélectionner

[1] 13 38


J'ai donc deux questions :

    Pourquoi cela revoie-t-il 13 et 38 et pas tous les indices absolus des minima ? Je me suis dis au départ que le test == ne fonctionnait pas parce que cela teste pour chaque valeur de df si elle est égale à tout le vecteur apply(obj, 2, min), mais dans ce cas pourquoi 13 et 38...?
    Comment renvoyer tous les attributs lignes du minimum de chaque colonne de df?

J'espère que ma demande est suffisamment bien expliquée, n'hésitez pas sinon.

Je remercie d'avance les personnes qui prendront le temps d'y réfléchir et de me répondre.

Bonne journée,

Antoine

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

Re: Obtenir les attributs lignes d'un dataframe

Messagepar Gabriel Terraz » 01 Juin 2017, 14:15

Salut,
Pour avoir la valeur minimum :

Code : Tout sélectionner

apply(df, 2, min)


Pour avoir l'indice :

Code : Tout sélectionner

idx <- apply(df, 2, which.min)


Et les noms de lignes correspondants :

Code : Tout sélectionner

rowames(df)[idx]

antoine le gal
Messages : 8
Enregistré le : 29 Mar 2017, 22:30

Re: Obtenir les attributs lignes d'un dataframe

Messagepar antoine le gal » 01 Juin 2017, 14:21

Bonjour Gabriel,

Super, merci ! Je ne connaissais pas which.min().

Bonne fin d'après-midi !

Antoine


Retourner vers « Questions en cours »

Qui est en ligne

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