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