【问题标题】:Subsetting for matrices矩阵的子集
【发布时间】:2021-12-29 23:32:16
【问题描述】:

我正在处理一些数据,我的矩阵看起来如结果所示:

results
      [,1]   [,2]      [,3]
 [1,]  1.7 0.0015 -1566.276
 [2,]  1.7 0.0016 -1564.695
 [3,]  1.7 0.0017 -1564.445
 [4,]  1.7 0.0018 -1565.373
 [5,]  1.7 0.0019 -1567.352
 [6,]  1.7 0.0020 -1570.274
 [7,]  1.8 0.0015 -1568.299
 [8,]  1.8 0.0016 -1565.428
 [9,]  1.8 0.0017 -1563.965
[10,]  1.8 0.0018 -1563.750
[11,]  1.8 0.0019 -1564.647
[12,]  1.8 0.0020 -1566.544
[13,]  1.9 0.0015 -1571.798
[14,]  1.9 0.0016 -1567.635
[15,]  1.9 0.0017 -1564.960
[16,]  1.9 0.0018 -1563.602
[17,]  1.9 0.0019 -1563.418
[18,]  1.9 0.0020 -1564.289
[19,]  2.0 0.0015 -1576.673
[20,]  2.0 0.0016 -1571.220
[21,]  2.0 0.0017 -1567.332
[22,]  2.0 0.0018 -1564.831
[23,]  2.0 0.0019 -1563.566
[24,]  2.0 0.0020 -1563.410

我想打印第 3 列出现最大值的行,所以我将其拆分为以下 2 行:

max(results[,3])
results[results[,3] == -1563.41,]

结果没有给我想要的行。 我尝试将值放在引号中:

max(results[,3])
results[results[,3] == "-1563.41",]

但这也没有用。

唯一有效的代码是当我将最大行代码嵌套在第二行代码中时:

results[results[,3] == max(results[,3]),]

有人能解释一下为什么把它分解成几个步骤不起作用吗?

我试着把它变成一个也不起作用的数据框。使用 tidyverse 包中的过滤器也不起作用。

谢谢,

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    R 将数字打印到最大getOption("digits") 有效数字。我怀疑-1563.410 是四舍五入到七位有效数字的最大值,不是确切的最大值。如果results[, 3]中没有一个元素正好等于四舍五入的数字-1563.410,那么

    results[results[, 3] == -1563.41, ]
    

    返回一个 0×3 矩阵。同时,max(results[, 3]) 是确切的最大值,所以

    results[results[, 3] == max(results[, 3]), ]
    

    返回你想要的矩阵子集。

    请注意,如果有n 行的第三个元素等于max(results[, 3]),那么如果n = 1,则子集是一个长度为3 的向量,如果n > 1n-by-3 矩阵(见?Extract)。如果在n > 1 的情况下,您只需要n 行中的第一行,那么您应该这样做:

    results[which.max(results[, 3]), ]
    

    【讨论】:

    • 明白了,所以基本上是因为我要求它找到一个四舍五入的数字,这不是一个精确的解决方案。非常感谢您的帮助
    猜你喜欢
    • 2016-06-25
    • 1970-01-01
    • 2022-11-08
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2016-09-06
    • 2013-10-15
    相关资源
    最近更新 更多