У меня большой фреймворк. Я хочу удалить выбросы из каждого столбца моего фрейма данных, выведенные из коробчатых диаграмм. Вот воспроизводимый пример -
Сделайте фиктивный фрейм данных с 3 столбцами + несколькими выбросами
sample<-data.frame(a=c(444,2,3,4,-555), b=c(2,3,4,5,68), c=c(-100,8,9,10,11))
> sample
a b c
1 444 2 -100
2 2 3 8
3 3 4 9
4 4 5 10
5 -555 68 11
Определите выбросы для каждого столбца
out<-lapply(1:length(sample), function(i) sort(boxplot.stats(sample[[i]])$out))
> out
[[1]]
[1] -555 444
[[2]]
[1] 68
[[3]]
[1] -100
Данные подмножества за счет исключения выбросов
sample<-lapply(1:length(sample), function(i)
subset(sample[[i]], sample[[i]]!=out[[i]]))
Удивительно, но с предупреждениями работает только частично?!?
Warning message:
In sample[[i]] != out[[i]] :
longer object length is not a multiple of shorter object length
Данные после подмножества выглядят как
> sample
[[1]]
[1] 444 2 3 4
[[2]]
[1] 2 3 4 5
[[3]]
[1] 8 9 10 11
Для столбца 1 удалил только -555, сохранил 444 ?? Хорошо работает для столбцов 2 и 3. В предупреждающем сообщении четко указано, почему это происходит. Удалив по одному выбросу из каждой группы, можно сохранить одинаковую длину ...
Мой второй подход - сделать все выбросы "NA".
sample<-lapply(1:length(sample), function(i)
sample[[i]][sample[[i]]==out[[i]]]<-NA)
Не работает !! Как я могу решить эту проблему?