【问题标题】:How to identify coordinates in R如何识别R中的坐标
【发布时间】:2013-07-15 18:35:52
【问题描述】:

我想确定我的向量的哪个坐标给了我最大的价值。举个简单的例子,假设:

x <- c(10,22,20,18,5)

最大值是22,但是如何自动识别坐标2的最大值呢?

谢谢!

【问题讨论】:

  • which.max(x).

标签: r


【解决方案1】:

which.max 是@Hong Ooi 指出的你的朋友

> x <- c(10,22,20,18,5)
> which.max(x)
[1] 2

另一种(不是最佳方式)是whichmax 的组合。

> which(x==max(x))
[1] 2

【讨论】:

  • 当 x 不是一维时,注意 which(x == max(x), arr.ind=TRUE) 会很有帮助。
【解决方案2】:

首先,找到max的最大值:

> max(x)
[1] 22

从那里,您可以找出向量中的哪些值与最大值匹配:

> x==max(x)
[1] FALSE  TRUE FALSE FALSE FALSE

which() 可用于将布尔向量转换为索引:

which(x==max(x))
[1] 2

【讨论】:

  • +1 我不明白为什么这需要投票。这就是任何不知道 which.max 或使用任何其他语言或使用多维数组的人都会这样做的方式。
  • @asb 我同意,一个很好的答案。
  • @asb 真的吗?在任何其他语言中,您会遍历向量的长度两次并创建一个中间布尔向量?
  • 嗯..我没想到会这样。让我限定一下:在任何其他不需要过早优化的高级语言中,这将是第一种方法。在低级语言中,我可能会循环一次并使用额外的int
【解决方案3】:

因为您说的是坐标,所以我假设实例可能并不总是一维向量,因此我将对@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 是一个“更快”的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    相关资源
    最近更新 更多