which.min()随机抽样

时间:2013-10-08 11:03:26

标签: r

我有一个变量向量:

x<-runif(1000,0,1)

我想选择值最小的元素:

x[which.min(x)]

默认情况下,which.min(x)将返回满足此条件的第一个元素,但是,可能会发生多个元素同样低的情况。

有没有办法从这些值中抽样并只返回一个?

2 个答案:

答案 0 :(得分:3)

使用which查找所有那些等于矢量最小值的元素的索引并随机抽样一个(除非最小值出现一次 - 然后我们就可以返回它)。

# Find indices of minima of vector
ids <- which( x == min(x) )

#  If the minimum value appear multiple times pick one index at random otherwise just return its position in the vector
if( length( ids ) > 1 )
  ids <- sample( ids , 1 )

#  You can use 'ids' to subset as per usual
x[ids]

答案 1 :(得分:2)

另一种类似的方法,但不使用if的方法是使用sample匹配的值进行seq_along

以下是两个例子。 x1有多个最小值。 x2只有一个。

## Make some sample data
set.seed(1)
x1 <- x2 <- sample(100, 1000, replace = TRUE)
x2[x2 == 1][-1] <- 2 ## Make x2 have just one min value

## Identify the minimum values, and extract just one of them.
y <- which(x1 == min(x1))
y[sample(seq_along(y), 1)]
# [1] 721

z <- which(x2 == min(x2))
z[sample(seq_along(z), 1)]
# [1] 463