【问题标题】:R: Find the Maximum Point in a DatasetR:查找数据集中的最大点
【发布时间】:2022-01-01 14:37:11
【问题描述】:

我正在使用 R 编程语言。假设我有以下数据:

set.seed(123)

a = rnorm(100000,10,10)
b = rnorm(100000,10,10)

my_data = data.frame(a,b)

plot(my_data$a, my_data$b)

当您查看这些数据时:

 head(my_data)
          a         b
1  4.395244 12.649934
2  7.698225 28.307475
3 25.587083  9.406217
4 10.705084  9.467906
5 11.292877 14.379042
6 27.150650 23.374490

我的问题:有没有办法找出这个数据集是否包含这样的点

  • “a”的所有值都小于该点的 a 坐标并且
  • “b”的所有值都小于该点的b坐标

有没有办法查出这个数据集是否包含“全局最大点”?

例如,像上面的红点。我知道在大多数情况下,不太可能找到这样的点,因为a坐标最大的点不一定有最大的b坐标,反之亦然:

#row with max value of "a"
which(my_data == max(my_data$a), arr.ind=TRUE)

       row col
[1,] 23102   1

#row with max value of "b"
 which(my_data == max(my_data$b), arr.ind=TRUE)
      row col
[1,] 2071   2

#display row with max value of "a"
> my_data[23102,]
             a        b
23102 53.22815 4.500006

#display row with max value of "b"
> my_data[2071,]
            a       b
2071 15.85992 52.0609

我们可以看到,最大值为“a”的行不包含最大值为“b”。

谢谢!

注意:在现实世界中,通常不可能找到“全局最大点”,因为在大数据中点“重叠”(不同行包含不同列的最大值)。在优化问题的上下文中,有几个点通常可以满足这个标准并且都被认为是合适的——这些点被称为“非支配”,据说位于“帕累托前沿”(绿线):

【问题讨论】:

    标签: r data-visualization data-manipulation


    【解决方案1】:

    这是一种方法。由于行号为0,所以不存在a和b都为最大值的点。

    library(dplyr)
    
    my_data %>%
      filter(if_all(.fns = ~.x == max(.x)))
    # [1] a b
    # <0 rows> (or 0-length row.names)
    

    【讨论】:

    • @www:谢谢你的回答!我试图举一个例子,我故意添加一个最大值并且它起作用了!
    • 库(dplyr) a = rnorm(100000,10,10) b = rnorm(100000,10,10) my_data = data.frame(a,b) a = rnorm(1,100,1) b = rnorm(1,100,1) my_data_1 = data.frame(a,b) final_data = rbind(my_data, my_data_1) final_data %>% filter(if_all(.fns = ~.x == max(.x)))
    猜你喜欢
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    相关资源
    最近更新 更多