我有一個很大的數據框。我想從箱形圖中推斷出我的數據框中每一列的異常值。這裏是一個可再現的示例 -使用R從數據幀的不同列中移除不同長度的異常值使用R
請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
虛設數據幀通過省略離羣
sample<-lapply(1:length(sample), function(i)
subset(sample[[i]], sample[[i]]!=out[[i]]))
定義離羣值對於每一列
out<-lapply(1:length(sample), function(i) sort(boxplot.stats(sample[[i]])$out))
> out
[[1]]
[1] -555 444
[[2]]
[1] 68
[[3]]
[1] -100
子集數據
令人驚訝的是,它只在部分警告中起作用?!?
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)
不工作!我怎麼解決這個問題?
感謝您的解釋! – ToNoY