为 R 中的前 N ​​个值子集命名数字

Subsetting a named numeric for top N values in R

我有一个很大的数字对象,它是隔离森林模型的输出。

我希望对模型的输出进行子集化以找到前 N 个异常值。使用 here 中的示例代码,我可以找到最大的离群值,但我希望找到不止一个离群值

我的数据如下:

if (!require("pacman")) install.packages("pacman")
pacman::p_load(isotree)

set.seed(1) 

m <- 100 

n <- 2 

X <- matrix(rnorm(m * n), nrow = m)

# ADD CLEAR OUTLIER TO THE DATA
X <- rbind(X, c(3, 3))

# TRAIN AN ISOLATION FOREST MODEL
iso <- isolation.forest(X, ntrees = 10, nthreads = 1)

# MAKE A PREDICTION TO SCORE EACH ROW
pred <- predict(iso, X)

最大离群值可以使用以下方法进行子集化

X[which.max(pred), ]

dplyr::slice_max 似乎与我的大型数字对象不兼容。

任何可以让我对数据进行子集化以找到前 N 个异常值的建议都将不胜感激。

这是否解决了您的问题?

library(tidyverse)
#install.packages("isotree")
library(isotree)

set.seed(1) 

m <- 100 

n <- 2 

X <- matrix(rnorm(m * n), nrow = m)

# ADD CLEAR OUTLIER TO THE DATA
X <- rbind(X, c(3, 3))

# TRAIN AN ISOLATION FOREST MODEL
iso <- isolation.forest(X, ntrees = 10, nthreads = 1)

# MAKE A PREDICTION TO SCORE EACH ROW
pred <- predict(iso, X)

X[which.max(pred), ]
#> [1] 3 3

# Perhaps this?
data.frame(X, "pred" = pred) %>%
  slice_max(order_by = pred, n = 3)
#>          X1         X2      pred
#> 1  3.000000  3.0000000 0.7306871
#> 2 -1.523567 -1.4672500 0.6496666
#> 3 -2.214700 -0.6506964 0.5982211

# Or maybe this?
data.frame(X, "pred" = pred) %>%
  slice_max(order_by = X1, n = 3)
#>         X1        X2      pred
#> 1 3.000000 3.0000000 0.7306871
#> 2 2.401618 0.4251004 0.5014570
#> 3 2.172612 0.2075383 0.4811756

reprex package (v2.0.1)

创建于 2022-04-06