R 用方框图消除异常值

R 用方框图消除异常值,r,outliers,R,Outliers,我试图从我的数据集中删除异常值,但我似乎没有工作。我已经在一个数字向量上测试了这项技术,它成功了。但是,当尝试将其应用于来自csv文件的数据集时。它似乎没有任何作用。我是做错了什么,还是接近异常值移除完全错了 原始数据集将“样本”编号作为csv文件的第一列,将“类”(van、car等)作为最后一列,因此我从数据集中删除了这些列 剔除异常值后(不确定是否正确) CSV文件数据的测试 vehicles <- read.csv("C:/Users/Documents/vehic

我试图从我的数据集中删除异常值,但我似乎没有工作。我已经在一个数字向量上测试了这项技术,它成功了。但是,当尝试将其应用于来自csv文件的数据集时。它似乎没有任何作用。我是做错了什么,还是接近异常值移除完全错了

  • 原始数据集将“样本”编号作为csv文件的第一列,将“类”(van、car等)作为最后一列,因此我从数据集中删除了这些列
剔除异常值后(不确定是否正确)

CSV文件数据的测试

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])