我想确定我的向量的哪个坐标给了我最大的价值。举个简单的例子假设:
x <- c(10,22,20,18,5)
最大值是22,但是如何自动识别坐标2具有最大值?
谢谢!
答案 0 :(得分:4)
which.max
是你的朋友
> x <- c(10,22,20,18,5)
> which.max(x)
[1] 2
另一种(非最佳方式)是which
和max
的组合。
> which(x==max(x))
[1] 2
答案 1 :(得分:2)
首先,使用max:
找到最大值> max(x)
[1] 22
从那里,您可以确定向量中的哪个值匹配最大值:
> x==max(x)
[1] FALSE TRUE FALSE FALSE FALSE
which()可用于将布尔向量转换为索引:
which(x==max(x))
[1] 2
答案 2 :(得分:1)
因为你说的是坐标,我假设这个案例并不总是一维向量,因此我将对@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
是一种“更快”的解决方案。