如何从箱线图异常值中获取数据框?

问题描述 投票:0回答:1

我想获取数据框中列的极值。为此,我使用箱线图函数。但是,我无法获取数据框中包含异常值和列名称的数据框。如何将箱线图函数(列表)的输出合并到数据框中?

data_numeric <- select_if(data, is.numeric) 
boxplot_data <- boxplot(data_numeric)

示例数据:

dataDummy = data.frame(c(1:10, 100, 110))
colnames(dataDummy) <-c('nameofcol') 

我想要的输出是将 100 和 110 链接到 nameofcol 的数据框。

r dataframe boxplot outliers
1个回答
0
投票

第一种方法可能使用

%in%
将异常值与原始数据进行匹配。事实上,使用 this 数据,它是有效的:

dataDummy$out <- dataDummy$nameofcol %in% boxplot_data$out
dataDummy
#    nameofcol   out
# 1          1 FALSE
# 2          2 FALSE
# 3          3 FALSE
# 4          4 FALSE
# 5          5 FALSE
# 6          6 FALSE
# 7          7 FALSE
# 8          8 FALSE
# 9          9 FALSE
# 10        10 FALSE
# 11       100  TRUE
# 12       110  TRUE

但是,对于R FAQ 7.31以及与为什么这些数字不相等?相关,这可能并不总是有效:

(0.1 + 0.05) %in% 0.15
# [1] FALSE

因此我们可以采取稍微昂贵的方法来测试容差(例如 1e-9),并使用它。

abs((0.1 + 0.05) - 0.15) < 1e-9
# [1] TRUE

使用此功能的一种方法是使用

outer
:

dataDummy$out2 <- rowSums(abs(outer(dataDummy$nameofcol, boxplot_data$out, `-`)) < 1e-9) > 0
dataDummy
#    nameofcol   out  out2
# 1          1 FALSE FALSE
# 2          2 FALSE FALSE
# 3          3 FALSE FALSE
# 4          4 FALSE FALSE
# 5          5 FALSE FALSE
# 6          6 FALSE FALSE
# 7          7 FALSE FALSE
# 8          8 FALSE FALSE
# 9          9 FALSE FALSE
# 10        10 FALSE FALSE
# 11       100  TRUE  TRUE
# 12       110  TRUE  TRUE

(只需要

out2
,我做了第二栏只是为了比较。)

© www.soinside.com 2019 - 2024. All rights reserved.