我有一个变量向量:
x<-runif(1000,0,1)
我想选择值最小的元素:
x[which.min(x)]
默认情况下,which.min(x)
将返回满足此条件的第一个元素,但是,可能会发生多个元素同样低的情况。
有没有办法从这些值中抽样并只返回一个?
答案 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