R:查找数据集中的最大点
R: Find the Maximum Point in a Dataset
我正在使用 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 坐标 AND
- "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”。
谢谢!
注意:在现实世界中,通常不可能找到“全局最大点”,因为在大数据中点“重叠”(不同行包含不同的最大值列)。在优化问题的上下文中,几个点通常可以满足这个标准并且都被认为是合适的 - 这些点被称为“非支配”并且位于“Pareto Frontier”(绿线)上:
这是一种方法。由于行号为0,所以不存在a和b都最大的点。
library(dplyr)
my_data %>%
filter(if_all(.fns = ~.x == max(.x)))
# [1] a b
# <0 rows> (or 0-length row.names)
我正在使用 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 坐标 AND
- "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”。
谢谢!
注意:在现实世界中,通常不可能找到“全局最大点”,因为在大数据中点“重叠”(不同行包含不同的最大值列)。在优化问题的上下文中,几个点通常可以满足这个标准并且都被认为是合适的 - 这些点被称为“非支配”并且位于“Pareto Frontier”(绿线)上:
这是一种方法。由于行号为0,所以不存在a和b都最大的点。
library(dplyr)
my_data %>%
filter(if_all(.fns = ~.x == max(.x)))
# [1] a b
# <0 rows> (or 0-length row.names)