【发布时间】:2019-06-17 16:15:39
【问题描述】:
我正在尝试在从下面的数据框生成的多组箱形图中注释异常值:
Chr. variable value
1 1 W01 21270
2 2 W01 15478
3 3 W01 12479
4 4 W01 9293
5 5 W01 9936
6 6 W01 13160
7 7 W01 10386
8 8 W01 8021
9 9 W01 9627
10 10 W01 9635
11 11 W01 12918
12 12 W01 11617
13 13 W01 4158
14 14 W01 6863
15 15 W01 7259
16 16 W01 10021
17 17 W01 12567
18 18 W01 3752
19 19 W01 15910
20 20 W01 5557
21 21 W01 2908
22 22 W01 5247
23 X W01 4052
24 Y W01 42
25 1 W02 24278
26 2 W02 17624
27 3 W02 14105
. . .
. . .
我采用了this thread:的以下解决方案
is_outlier <- function(x) {
return(x < quantile(x, 0.25) - 1.5 * IQR(x) | x > quantile(x, 0.75) + 1.5 * IQR(x))
}
dat.m %>% group_by(Chr.) %>% mutate(outlier = ifelse(is_outlier(value), value, as.numeric(NA))) %>% ggplot(., aes(x = factor(Chr.), y = value)) + geom_boxplot() + geom_text(aes(label = outlier), na.rm = TRUE, hjust = -0.3)
但是由于某种原因,这不起作用。我想用variable 列中的相应值标记异常值。任何建议都非常感谢!
【问题讨论】:
-
我不认为我理解您的示例代码。它应该与您的示例数据集或链接问题中的数据一起使用吗?您的变量称为
value(我认为),而不是drat。而且您缺少将文本变量作为字符串的代码,这是链接答案中标签所基于的代码。您能否添加更多代码以便我们看到它(可能还有一个包含异常值的示例数据集:-))? -
感谢您的有益建议。我相应地进行了编辑!
-
我不明白。您的情节有您所要求的:标有其价值的异常值。您能否更具体地说明您认为哪里出了问题?
-
哦,太好了,我想我现在明白了。您正在使用的答案分两步制作标签:首先他们制作一个逻辑变量
is_outlier,然后他们从中制作标签。您可以在mutate()通话中一步完成此操作。喜欢mutate(outlier = ifelse(is_outlier(value), as.character(variable), NA))。请注意,我使用variable作为标签而不是value。 -
@aosmith 非常感谢您的帮助。它解决了这个问题。您能否也将其发布为答案,以便我可以将此线程标记为已解决。