a <- c(1, 2, 0, 3, 7)
Je cherche une fonction pour renvoyer l'indice de la plus petite valeur, 3. Qu'est-ce que c'est?
Vous recherchez 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 constater ci-dessus, lorsque plusieurs éléments sont liés au minimum, which.min()
ne renvoie que l'index du premier. Vous pouvez utiliser la seconde construction si vous souhaitez plutôt afficher les index de tous les éléments correspondant à la valeur minimale.)
Comme alternative à la réponse de Josh
a <- c(1, 2, 0, 3, 7)
which(a == min(a))
cela donne tous les index égaux à la valeur minimale. Donc, si nous avions plus d'une valeur correspondant à la valeur la plus basse
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 vous cherchez juste combien d’éléments sont égaux au minimum (comme vous l’impliquez dans un des commentaires), vous pouvez le faire à la place:
a <- c(1, 2, 0, 3, 7, 0)
sum(a == min(a))
Si vous êtes amateur d'efficacité, vous pouvez utiliser la fonction min_max du package Rfast, avec index = True
Il renverra simultanément l’indice du minimum et celui de la valeur maximale Plus rapidement que ce qui n’a pas é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