Я понимаю, что ваше конечное намерение - "Как игнорировать выбросы в столбце для последующего анализа?"Вы не сказали, откуда взялся магический диапазон 5,20, и какого рода анализ (среднее / медиана / stdev, или что-то более сложное?).
Вы сказали: "с целью использованиястолбец в исходном кадре данных для анализа без поднабора, поскольку целью этого процесса является удаление выбросов как визуально, так и для вычисления средних значений. "
Если магические значения 5,20 получены из квантиль (например, 5-5-й квантиль, "средний 90-й квантиль"), вы можете автоматически вычислить произвольные значения квантиля с помощью quantile(df1$col_b, c(0.05,0.95))
.Если вы, например, также хотите увидеть медиану, передайте вектор quantile(..., c(0.05,0.5,0.95))
Принимая во внимание, что если 5,20 - известный диапазон, используйте подход, который другие показали вам с логической индексацией илиподмножество, чтобы назначить выбросы NA.NA - твой друг для анализа;он распространяется на все расчеты так, как вы хотите.NA также ваш друг для заговора.Учись любить Н.А.Сохраните копию оригинального df (или просто оригинального df $ col_b), если позже вам понадобится получить доступ к значениям выбросов.
Если вы хотите поэкспериментировать с дистрибутивами, чтобы увидеть, какой из ваших данных следует, см. Гл. 8«Распределения вероятностей» http://cran.r -project.org / doc / manual / R-intro.pdf
Здесь все это в коде:
#inrange <- function(x,a,b) { x>=a & x<=b }
inrange_else_NA <- function(x,minmax) { ifelse((x>=minmax[1] & x<=minmax[2]), x, NA) }
# If you want to save the original col_b and modify it in-place...
#df$col_b.orig <- df$col_b
# To exclude outliers outside a known range...
df$col_b_NAs <- inrange_else_NA(df$col_b, c(5, 20))
# ... or else to exclude outliers outside (say) middle 90th quantile
middle_90th_quantile <- as.vector(quantile(df$col_b, c(0.05,0.95)))
df$col_b_NAs <- inrange_else_NA(x,middle_90th_quantile)