我想获取数据框中列的极值。为此,我使用箱线图函数。但是,我无法获取数据框中包含异常值和列名称的数据框。如何将箱线图函数(列表)的输出合并到数据框中?
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 的数据框。
第一种方法可能使用
%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
,我做了第二栏只是为了比较。)