我想獲得最小值的索引,例如:
v1 <- c(20, 30, 5, 18, 2, 10, 8, 4)
結果是:
1 3 5
解釋:
結束v1,我們從 value 開始20。不用繼續,我們注意到最小值 ( 20) 及其索引 ( 1)。我們忽略相鄰元素,因為它大于20。所以20仍然保持著最小的記錄。然后我們轉移到5,這是小比20。現在它5是最小的,我們注意到它的索引 ( 3)。由于18不小于 so-far-winner ( 5),我們忽略它并繼續前進。由于2是迄今為止最小的,因此它是新的贏家,并且它的位置用 ( 5) 表示。沒有比2向右移動更小的值,就是這樣。最后,職位是:
1 # for `20`
3 # for `5`
5 # for `2`
顯然,輸出應該始終以 開頭1,因為我們永遠不知道接下來會發生什么。
另一個例子:
v2 <- c(7, 3, 4, 4, 4, 10, 12, 2, 7, 7, 8)
# output:
1 2 8
Which.min()似乎很相關。但我不確定如何使用它來獲得所需的結果。
uj5u.com熱心網友回復:
您可以使用:
which(v1 == cummin(v1))
[1] 1 3 5
如果您有重復的累積最小值并且不希望將重復項編入索引,則可以使用:
which(v1 == cummin(v1) & !duplicated(v1))
或者:
match(unique(cummin(v1)), v1)
uj5u.com熱心網友回復:
這是詳細的方式:
library(purrr)
v1 <- c(20, 30, 5, 18, 2, 10, 8, 4)
v1 %>%
length() %>%
seq() %>%
map_dbl(~ which.min(v1[1: .x])) %>%
unique()
#> [1] 1 3 5
由reprex 包(v2.0.1)于 2021 年 12 月 8 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/376489.html
上一篇:完整的數字向量
下一篇:格式化4個不同資料集中的日期
