У меня есть набор данных с различными группами, разделенными переменной id
, и я хочу вычислить и добавить оценки аномалий в кадре данных.
Вот пример набора данных с тремя компаниями,
set.seed(1234)
id1 <- rep(23, 60)
n1 <- rnorm(n = 60, mean = 100, sd = 5.2)
g1 <- rnorm(n = 60, mean = 200, sd = 8)
id2 <- rep(34, 60)
n2 <- rnorm(n = 60, mean = 500, sd = 110)
g2 <- rnorm(n = 60, mean = 800, sd = 160)
id3 <- rep(3, 60)
n3 <- rnorm(n = 60, mean = 50, sd = 11)
g3 <- rnorm(n = 60, mean = 80, sd = 16)
id <- c(id1, id2, id3)
n <- c(n1, n2, n3)
g <- c(g1, g2, g3)
df <- data.frame(id, n, g)
rm(list = ls() [!ls() %in% "df"])
Первая переменная - это компания id
. Каждая компания имеет 60 наблюдений. Код, который я хочу запустить в каждой компании, выглядит следующим образом.
library(isofor)
mod <- iForest(X = df, 50, 10)
anomalyscore <- predict(mod, df)
df <- data.frame(df, anomalyscore)
Однако, чтобы запускать команды для каждой компании отдельно, мне понадобится такой цикл,
n <- 3
for (i in 1:n {
mod <- iForest(X = df, 50, 10)
anomalyscore <- predict(mod, df)
df <- data.frame(df, anomalyscore)
}
Вопрос 1
Какую ошибку / ошибки я сделал в вышеуказанном цикле? То, что он делает, создает три оценки аномалии вместо одного. Мне нужен один столбец оценок аномалий, рассчитанных отдельно для каждой компании
Вопрос 2
Давайте предположим, что я точно не знаю количество наблюдений для каждой компании, тогда как это настроить в цикле?
Любая помощь будет принята с благодарностью.