R 用方框图消除异常值
我试图从我的数据集中删除异常值,但我似乎没有工作。我已经在一个数字向量上测试了这项技术,它成功了。但是,当尝试将其应用于来自csv文件的数据集时。它似乎没有任何作用。我是做错了什么,还是接近异常值移除完全错了R 用方框图消除异常值,r,outliers,R,Outliers,我试图从我的数据集中删除异常值,但我似乎没有工作。我已经在一个数字向量上测试了这项技术,它成功了。但是,当尝试将其应用于来自csv文件的数据集时。它似乎没有任何作用。我是做错了什么,还是接近异常值移除完全错了 原始数据集将“样本”编号作为csv文件的第一列,将“类”(van、car等)作为最后一列,因此我从数据集中删除了这些列 剔除异常值后(不确定是否正确) CSV文件数据的测试 vehicles <- read.csv("C:/Users/Documents/vehic
- 原始数据集将“样本”编号作为csv文件的第一列,将“类”(van、car等)作为最后一列,因此我从数据集中删除了这些列
vehicles <- read.csv("C:/Users/Documents/vehiclescsv.csv") #load csv file
vehicles2 <- vehicles[,-1] #remove first column "Sample" number
vehicles3 <- vehicles2[,-19] #remove final column "Class" name
vehData <- vehicles3
vehClass <- vehicles$Class #store final column, class name
boxplot(vehData) #plot data to see outliers
OutVals <- boxplot(vehData)$out #find and store outliers
OutVals
vehDataRemoveOut <- vehData[!(vehData%in%OutVals)] #remove the outliers
length(vehData) - length(vehDataRemoveOut)# see if outliers have been removed
boxplot(vehDataRemoveOut) #re-plot to see changes
vehicles据我所知,问题在于您没有从每个列中删除异常值。下面是一个base R
解决方案:
数据:
移除后的箱线图:
不太清楚:问题出在哪里?你有什么错误吗?谢谢你的回复!没有错误只是在执行OutVals时识别异常值你能用dput(head())
显示数据帧的片段吗?我已经将dput(head(vehData))的结果添加到post:DPlz以可复制的形式提供dput
(就像代码一样)!非常感谢。我想这可能奏效了。我尝试了这一点,并在帖子的顶部添加了我的结果,比较了之前和之后。我做得对吗?请您解释一下这行代码是如何工作的,如果它帮助的话,请考虑接受和/或支持答案,如果它有帮助,请考虑接受和/或投票的答案。您更新的箱线图看起来相当不错(除了剩下的一两个异常值)。要删除最后的异常值,我只需要重复这个过程?再次感谢你的帮助。我也接受了答案。你可以试着重复这个过程,但我不知道这是否是一个合适的方法。。。
x <- c(10,20,30,40,50,1000)
boxplot(x)
OutVals <- boxplot(x)$out
OutVals
RemovedOut <- x[!(x %in%OutVals)]
length(x) - length(RemovedOut)
boxplot(RemovedOut)
vehData <-
structure(
list(
Samples = 1:6,
Comp = c(95L, 91L, 104L, 93L, 85L,
107L),
Circ = c(48L, 41L, 50L, 41L, 44L, 57L),
D.Circ = c(83L,
84L, 106L, 82L, 70L, 106L),
Rad.Ra = c(178L, 141L, 209L, 159L,
205L, 172L),
Pr.Axis.Ra = c(72L, 57L, 66L, 63L, 103L, 50L),
Max.L.Ra = c(10L,
9L, 10L, 9L, 52L, 6L),
Scat.Ra = c(162L, 149L, 207L, 144L, 149L,
255L),
Elong = c(42L, 45L, 32L, 46L, 45L, 26L),
Pr.Axis.Rect = c(20L,
19L, 23L, 19L, 19L, 28L),
Max.L.Rect = c(159L, 143L, 158L, 143L,
144L, 169L),
Sc.Var.Maxis = c(176L, 170L, 223L, 160L, 241L, 280L),
Sc.Var.maxis = c(379L, 330L, 635L, 309L, 325L, 957L),
Ra.Gyr = c(184L,
158L, 220L, 127L, 188L, 264L),
Skew.Maxis = c(70L, 72L, 73L,
63L, 127L, 85L),
Skew.maxis = c(6L, 9L, 14L, 6L, 9L, 5L),
Kurt.maxis = c(16L,
14L, 9L, 10L, 11L, 9L),
Kurt.Maxis = c(187L, 189L, 188L, 199L,
180L, 181L),
Holl.Ra = c(197L, 199L, 196L, 207L, 183L, 183L),
Class = c("van", "van", "saab", "van", "bus", "bus")
),
row.names = c(NA,
6L), class = "data.frame")
x <- c(1,0.8,3,4,10,0.01)
y <- c(1, 7, 0.5, 0.8,0.7, 1.1)
z <- c(0,0.1,0.2, 5, 0.5,0.6)
df <- data.frame(x,y,z)
a <- boxplot(df)$out
df_new <- sapply(df, function(x) x[!x %in% a])