a <- c(1, 2, 0, 3, 7)
Je cherche une fonction qui renvoie l'indice de la plus petite valeur, 3. Qu'est-ce que c'est ?
a <- c(1, 2, 0, 3, 7)
Je cherche une fonction qui renvoie l'indice de la plus petite valeur, 3. Qu'est-ce que c'est ?
Vous êtes à la recherche de which.min()
:
a <- c(1,2,0,3,7,0,0,0)
which.min(a)
# [1] 3
which(a == min(a))
# [1] 3 6 7 8
(Comme vous pouvez le voir ci-dessus, lorsque plusieurs éléments sont à égalité pour le minimum, which.min()
ne renvoie que l'indice du premier. Vous pouvez utiliser la deuxième construction si vous voulez plutôt les indices de tous les éléments qui correspondent à la valeur minimale).
...oui je me demandais comment obtenir les indices de tous les éléments minimums ? J'ai besoin de savoir combien sont les minimums, parfait ! J'ai mis du temps à comprendre, merci.
Comme alternative à la réponse de Josh
a <- c(1, 2, 0, 3, 7)
which(a == min(a))
cela donne chaque indice qui est égal à la valeur minimale. Donc si nous avions plus d'une valeur correspondant à la valeur minimale
a <- c(1, 2, 0, 3, 7, 0)
which(a == min(a)) # returns both 3 and 6
which.min(a) # returns just 3
Edit : Si ce que vous recherchez est juste le nombre d'éléments qui sont égaux au minimum (comme vous le laissez entendre dans un des commentaires) vous pouvez faire ceci à la place :
a <- c(1, 2, 0, 3, 7, 0)
sum(a == min(a))
Si vous êtes un adepte de l'efficacité, vous pouvez utiliser la fonction min_max de la bibliothèque de l'UE. Rfast paquet, avec index = True
Il retournera l'indice du minimum et l'indice du maximum. simultanément, plus rapidement que ce qui a été utilisé jusqu'à présent.
Par exemple
a = runif(10000)
Rfast::min_max(a,index=T)
# min max
# 2984 2885
which(a == min(a))
#[1] 2984
a = runif(1000000)
microbenchmark::microbenchmark(
min_max = Rfast::min_max(a,index=T),
which1 = which(a == min(a)),
which2 = which.min(a)
)
Unit: milliseconds
expr min lq mean median uq max neval
min_max 1.889293 1.9123860 2.08242647 1.9271395 2.0359730 3.527565 100
which1 9.809527 10.0342505 13.16711078 10.3671640 14.7839955 111.424664 100
which2 2.400745 2.4216995 2.66374110 2.4471435 2.5985265 4.259249 100
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.