我想确定我的向量的哪个坐标给了我最大的价值。举一个简单的例子,假设:
x <- c(10,22,20,18,5)
最大值是 22,但我怎样才能自动识别坐标 2 具有最大值?
谢谢!
which.max
是@Hong Ooi 指出的你的朋友吗
> x <- c(10,22,20,18,5)
> which.max(x)
[1] 2
另一种(不是最佳方式)是which
和的组合max
。
> which(x==max(x))
[1] 2
首先,找到 max 的最大值:
> max(x)
[1] 22
从那里,您可以找出向量中的哪些值与最大值匹配:
> x==max(x)
[1] FALSE TRUE FALSE FALSE FALSE
which() 可用于将布尔向量转换为索引:
which(x==max(x))
[1] 2
因为您说的是坐标,所以我假设案例可能并不总是一维向量,因此我将对@Jilber 发表评论作为答案。
一般的答案是使用which(x == max(x), ind.arr = TRUE)
. 这将为您提供任何维度的数组的所有维度。例如
R> x <- array(runif(8), dim=rep_len(2, 3))
R> x
, , 1
[,1] [,2]
[1,] 0.3202624 0.7740697
[2,] 0.9374742 0.2370483
, , 2
[,1] [,2]
[1,] 0.9423731 0.2099402
[2,] 0.7035772 0.8195685
R> which(x == max(x), arr.ind=TRUE)
dim1 dim2 dim3
[1,] 1 1 2
R> which(x[1, , ] == max(x[1, , ]), arr.ind=TRUE)
row col
[1,] 1 2
R> which(x[1, 1, ] == max(x[1, 1, ]), arr.ind=TRUE)
[1] 2
对于一维向量的特定情况,which.max
是一个“更快”的解决方案。