所有列的异常值,分组为R
如果我想按某一列对数据进行分组,如何获得每个列、每个组的异常值列表?所有列的异常值,分组为R,r,group-by,R,Group By,如果我想按某一列对数据进行分组,如何获得每个列、每个组的异常值列表? 我不想删除它们,我只想将它们作为一个输出。按照感兴趣的列对数据进行分组后,通过应用boxplot.stats函数对其余的列进行汇总,提取out组件并将其粘贴到单个字符串中(也可以作为列表列返回) reprex对于设计问题的解决方案非常有帮助。这里的挑战是,每列可能没有相同数量的异常值,但数据帧的列必须具有相同的长度。我建议将所有目标列收集到键值对中,然后过滤生成的数据帧。这将重新计算rn包含由键值对识别的所有异常值的数据帧(I
我不想删除它们,我只想将它们作为一个输出。按照感兴趣的列对数据进行分组后,
通过应用boxplot.stats
函数对其余的列进行汇总,提取out
组件并将其粘贴到单个字符串中(也可以作为列表
列返回)
reprex对于设计问题的解决方案非常有帮助。这里的挑战是,每列可能没有相同数量的异常值,但数据帧的列必须具有相同的长度。我建议将所有目标列收集到键值对中,然后过滤生成的数据帧。这将重新计算rn包含由键值对识别的所有异常值的数据帧(IQR方法)
在下面的示例中,我创建了一个包含两个数据列和一个分组列的数据框。
在按v3
分组之前,v1
和v2
列被收集到一个键和值列中。然后使用.25-IQR*1.5和.75+IQR*1.5对新的值
列中的任何异常值进行过滤
这将产生一个包含3列的数据框:v3
、key
和value
,其中v3
是分组列,key
包含原始数据框的列名,value
包含原始数据集中的异常值
set.seed(12345)
df <- tibble(
v1 = rnorm(1000),
v2 = rnorm(1000),
v3 = c(rep("group a", 500), rep("group b", 500))
)
df %>%
gather(key = "key", value = "value", -v3) %>%
group_by(v3) %>%
filter(
value < (quantile(value, 0.25) - IQR(value, na.rm = TRUE) * 1.5) |
value > (quantile(value, 0.75) + IQR(value, na.rm = TRUE) * 1.5)
)
set.seed(12345)
df%
聚集(key=“key”、value=“value”、-v3)%>%
分组依据(v3)%>%
滤器(
值<(分位数(值,0.25)-IQR(值,na.rm=真)*1.5)|
值>(分位数(值,0.75)+IQR(值,na.rm=真)*1.5)
)
输出:
# A tibble: 16 x 3
# Groups: v4 [2]
v4 key value
<chr> <chr> <dbl>
1 group a v1 2.75
2 group b v1 3.33
3 group b v1 -2.78
4 group b v1 3.09
5 group a v3 -3.33
6 group a v3 3.29
7 group a v3 -2.77
8 group a v3 -2.97
9 group a v3 3.05
10 group b v3 2.70
11 group b v3 -2.81
12 group b v3 -2.77
13 group b v3 -3.13
14 group b v3 2.76
15 group b v3 -3.07
16 group b v3 -2.96
#一个tible:16 x 3
#组别:v4[2]
v4键值
1 a组v1 2.75
2组b组v1 3.33
3 b组v1-2.78
4 b组v1 3.09
5 a组v3-3.33
6 a组v3.29
7 a组v3-2.77
8 a组v3-2.97
9组a组v3.05
10 b组v3 2.70
11 b组v3-2.81
12 b组v3-2.77
13 b组v3-3.13
14 b组v3 2.76
15 b组v3-3.07
16 b组v3-2.96
仅当分组列以外的所有列都是数字时,此操作才有效。任何其他类型都会导致此操作失败,因为所有列都聚集到一个值列中,该值列必须为单一类型
# A tibble: 16 x 3
# Groups: v4 [2]
v4 key value
<chr> <chr> <dbl>
1 group a v1 2.75
2 group b v1 3.33
3 group b v1 -2.78
4 group b v1 3.09
5 group a v3 -3.33
6 group a v3 3.29
7 group a v3 -2.77
8 group a v3 -2.97
9 group a v3 3.05
10 group b v3 2.70
11 group b v3 -2.81
12 group b v3 -2.77
13 group b v3 -3.13
14 group b v3 2.76
15 group b v3 -3.07
16 group b v3 -2.96