Удалить выбросы из фрейма данных в R? - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь удалить выбросы из моих данных.В моем случае выбросы - это значения, которые находятся далеко от остальных данных при нанесении на блок-график.После удаления выбросов я сохраню данные в новом файле и запусту некоторую модель прогнозирования, чтобы увидеть результаты.Насколько они отличаются от исходных данных.

Я использовал один учебник и принял его, чтобы удалить выбросы из моих данных.Учебное пособие использует коробочное построение, чтобы выяснить выбросы.

Работает нормально, когда я запускаю столбец с выбросами.Но это вызывает ошибки, когда я запускаю его для столбца, который не имеет выбросов.Как убрать эту ошибку?

Вот код:

outlier_rem <- Data_combined #data-frame with 25 var, few have outliers

#removing outliers from the column

outliers <- boxplot(outlier_rem$var1, plot=FALSE)$out
#print(outliers)
ol <- outlier_rem[-which(outlier_rem$var1 %in% outliers),]

dim(ol)
# [1]  0 25
boxplot(ol)

Выдает ошибку:

no non-missing arguments to min; returning Infno non-missing arguments to max; 
returning -InfError in plot.window(xlim = xlim, ylim = ylim, log = log, yaxs = pars$yaxs) : 
  need finite 'ylim' values

1 Ответ

0 голосов
/ 20 февраля 2019

Следующее работает

# Sample data based on mtcars and one additional row
df <- rbind(mtcars[, 1:3], c(100, 6, 300))

# Identify outliers        
outliers <- boxplot(df$mpg, plot = FALSE)$out
#[1]  33.9 100.0

# Remove outliers
df[!(df$mpg %in% outliers), ]

Причина, по которой ваш метод дает сбой, заключается в том, что если нет outliers, which(mtcars$mpg %in% numeric(0)) возвращает integer(0), и в итоге получается нулевая строка data.frameЭто именно то, что вы видите из dim.

outliers <- boxplot(mtcars$mpg, plot = FALSE)$out
outliers
#numeric(0)

Сравнить

which(mtcars$mpg %in% outliers)
#integer(0)

с

df$mpg %in% outliers
# [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
#[25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

Здесь есть хороший пост здесь, на SO, который развивает этот момент.

...