R从异常值中找到相对最大值

R finding relative maximum from outliers

假设我有一个数字向量,我想为其找到一个通用截止值。例如:

x <- c(35, 2, 3, 30, 1, 4, 33, 6, 36)

在这种情况下,我只想提取一个包含 35, 30, 33, 36 的子集。在这种情况下,截止值将在 30 没有硬编码明确的截止值,我希望我的代码适应不同的数字向量,以便找到该截止值。

另一个例子是:

x <- c(1, 20, 42, 13, 118, 149, 130, 30, 11, 32, 120, 0.5, 0.03)

在这种情况下,合理的截止值是 118 左右。

目前我正在对截止值进行硬编码,因为我处理的是简单的案例,但是我想让这个过程更加模块化以用于更多可变向量。

您可以使用 quantile 函数

cutoff <- function(y, prob=0.7) y[y > quantile(y, prob)]

x <- c(35, 2, 3, 30, 1, 4, 33, 6, 36)
cutoff(x)
[1] 35 33 36

x <- c(1, 20, 42, 13, 118, 149, 130, 30, 11, 32, 120, 0.5, 0.03)
cutoff(x)
[1] 118 149 130 120

您可以根据需要定义不同的概率

cutoff(x, 0.8)
[1] 149 130 120