Возможно, есть много способов и, возможно, добавить пакеты, чтобы справиться с этим. Я предлагаю вам попробовать это первый:
library(sos); findFn("outlier")
Вот так, как вы могли бы сделать то, что ваше просим для использования функции scale
, которые могут стандартизировать векторы.
#create a data set with outliers
set.seed(10)
dat <- data.frame(sapply(seq_len(5), function(i)
sample(c(1:50, 100:101), 200, replace=TRUE)))
#standardize each column (we use it in the outdet function)
scale(dat)
#create function that looks for values > +/- 2 sd from mean
outdet <- function(x) abs(scale(x)) >= 2
#index with the function to remove those values
dat[!apply(sapply(dat, outdet), 1, any), ]
Так, отвечая на ваш вопрос, да, есть простой способ в том, что код, чтобы сделать это может быть сводились к 1 строке кода:
dat[!apply(sapply(dat, function(x) abs(scale(x)) >= 2), 1, any), ]
И я предполагаю, что есть пакет что может сделать это и многое другое. Пакет sos
потрясающий (IMHO) для поиска функций, которые вы хотите делать.
Если вы делаете поиск StackOverflow для '[R] удалить outlier' вы получите множество актуальных предыдущие вопросы, такие как: http://stackoverflow.com/q/1444306/602276 или HTTP: // stackoverflow.com/questions/4787332/how-to-remove-outliers-from-a-dataset – Andrie