Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
所有列的异常值,分组为R_R_Group By - Fatal编程技术网

所有列的异常值,分组为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