全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
13185 7
2015-06-29
现有一个data.frame,通过画boxplot发现了在不同的factor下,均存在异常值。我想把这些异常值序列给提取出来。不知如何实现?

谢谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-6-29 17:53:16
boxplot()有返回值,是个list,提取其中的out和group就是。
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-6-29 21:13:52
biohuang 发表于 2015-6-29 17:53
boxplot()有返回值,是个list,提取其中的out和group就是。
你这方法非常方便!谢谢!但是这样返回的是一个向量,我想根据这个向量再找值对应的名称。比如说,有这样两个数据:

a <- c(4,3,2,1)
b <- c(3,1,4)

我需要找到b中元素在a中的位置,怎么做呢?试了半天也不会。因为我如果提取到a对应数字的位子,我就能根据a中数据的位置,去找a在的dataframe里其他的对应数据了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-6-30 09:25:59
这个貌似就没法直接用boxplot()了。你可以用别的方法找到outlier,也可以利用boxplot()返回的结果用which()或match()去找outlier的位置。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-6-30 10:53:56
biohuang 发表于 2015-6-30 09:25
这个貌似就没法直接用boxplot()了。你可以用别的方法找到outlier,也可以利用boxplot()返回的结果用which() ...
我也是想了半天没有直接的办法。所以才想通过找到outlier,根据outlier返回的值去寻找源数据。我现在的一个比较笨的方法是把outlier转换成data.frame, 然后把这个data.frame和我的源data.frame,按outlier的列名用merge方法,提取outlier的源信息。
你提到的which()方法,我试了半天都不成功。which()的判断语句里,is.na、对比一个数值都比较好用,例如which(is.na(x)), which(x >/=/< 4)等等都能方便提取对应判断条件的下标,但是用which判断等于某一向量的时候就报错。例如我上面提到的例子,

a <- c(9,8,7,6,5)
b <- c(9,6,5)

我想提取a中9,6,5的下表位置,用which(a == b)就不行。不知道你有没有好的解决方法?毕竟which用起来很方便。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-7-1 16:33:56
治感冒 发表于 2015-6-30 10:53
我也是想了半天没有直接的办法。所以才想通过找到outlier,根据outlier返回的值去寻找源数据。我现在的一 ...
复制代码
这代码很丑很慢,而且有几个outlier相等的话还要另外处理……不过我想不到别的办法。

换个思路,其实outlier就是太大或太小的数,下面是比较清爽的解法
复制代码
这里面min.x和max.x的长度都等于x的分组数。然后每一组里面,小于min.x或大于max.x的数就是outlier
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群