6

我需要一些帮助来确定向量中的多个最小值。假设,我有一个向量 x:

x<-c(1,10,2, 4, 100, 3)

并想确定最小的 3 个元素的索引,即 1、2 和 3。我需要 的索引,因为我将使用索引来访问另一个向量中的相应元素。当然,排序会提供最小值,但我想在排序之前知道它们实际出现的索引。

4

4 回答 4

9

为了找到索引试试这个

which(x %in% sort(x)[1:3])  # this gives you and index vector
[1] 1 3 6

这表示第一个、第三个和第六个元素是向量中的前三个最低值,看看这些是哪些值:

x[ which(x %in% sort(x)[1:3])]  # this gives the vector of values
[1] 1 2 3

要不就

x[c(1,3,6)]
[1] 1 2 3

如果您有任何重复值,您可能需要先选择唯一值,然后对它们进行排序以找到索引,就像这样(@Jeffrey Evans 在他的回答中建议)

which(x %in% sort(unique(x))[1:3])
于 2012-11-19T17:08:44.297 回答
5

我想你的意思是你想知道底部 3 个元素的索引是什么?在这种情况下,你想要order(x)[1:3]

于 2012-11-19T17:14:42.347 回答
3

You can use unique to account for duplicate minimum values.

x<-c(1,10,2,4,100,3,1)
which(x %in% sort(unique(x))[1:3])
于 2012-11-19T17:17:20.647 回答
3

这是另一种rank包含重复项的方法。

 x <- c(x, 3)
 # [1]   1  10   2   4 100   3   3
 which(rank(x, ties.method='min') <= 3)
 # [1] 1 3 6 7
于 2012-11-19T17:25:51.030 回答