首页 > 解决方案 > R - 如果超过 25% 的组删除观察

问题描述

这是我的第一篇文章!我大约一年前开始使用 R,在过去的几个月里,我从这个 sub 中学到了很多东西!感谢您迄今为止的所有帮助。

这是我正在尝试做的事情:

• 按 POS 分组数据
• 在每个 POS 组内,任何 ORG 都不应超过数据集的 25%
• 如果 ORG 代表超过 25% 的观察值(列),则应删除离平均值最远的值。我认为这将循环直到来自该 ORG 的数据小于观察值的 25%。

我不确定如何解决这个问题,因为我对 R 函数不太熟悉。好吧,我假设这需要一个函数。

这是示例数据集:

print(Example)                                                                                                                                                            
# A tibble: 18 x 13
     Org   Pos  obv1  obv2  obv3  obv4 obv5   obv6  obv7  obv8  obv9 obv10 obv11
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <lgl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1     1     1 34.6   26.2  43.1 NA    NA    NA    NA    NA    NA    NA    NA   
 2     2     1 18.7   15.5  23.4 NA    NA    NA    NA    NA    NA    NA    NA   
 3     3     1 16.2   14.4  21.7 NA    NA    NA    NA    NA    NA    NA     1.32
 4     3     1 20.0   15.5  23.4 NA    NA     1.32  2.78  1.44 NA    NA     1.89
 5     3     1  2.39  16.9  24.1 NA    NA     1.13  1.52  1.12 NA    NA     2.78
 6     3     1 24.3   15.4  24.6 NA    NA     1.13  1.89  1.13 NA    NA     1.51
 7     6     1 16.7   16.0  23.4  0.19 NA     0.83  1.3   0.94  1.78  2.15  1.51
 8     6     1 18.7   16.4  25.8  0.19 NA     1.22  1.4   0.97  1.93  2.35  1.51
 9     6     1 19.3   16.4  25.8  0.19 NA     1.22  1.4   0.97  1.93  2.35  1.51
10     7     1 23.8   18.6  28.6 NA    NA    NA    NA    NA    NA    NA    NA   
11    12     2 28.8   24.4  39.7 NA    NA     1.13  1.89  1.32  2.46  3.21 NA   
12    13     2 24.6   19.6  29.4  0.16 NA     3.23  3.23  2.27 NA    NA    NA   
13    14     2 18.4   15.5  24.8 NA    NA     2.27  3.78  1.13  3.46  4.91  2.78
14    15     2 23.8   24.4  39.7 NA    NA    NA    NA    NA    NA    NA    NA   
15    15     2 25.8   24.4  39.7 NA    NA    NA    NA    NA    NA    NA    NA   
16    16     2 18.9   17.4  26.9  0.15 NA    NA     1.89  2.99 NA    NA     1.51
17    16     2 22.1   17.3  26.9 NA    NA    NA     2.57  0.94 NA    NA     1.51
18    16     2 24.3   19.6  28.5  0.15 NA    NA     1.51  1.32 NA    NA     2.27

结果看起来像这样:

print(Result)                                                                                                                                                             
# A tibble: 18 x 13
     Org   Pos  obv1  obv2  obv3  obv4 obv5   obv6  obv7  obv8  obv9 obv10 obv11
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <lgl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1     1     1  34.6  26.2  43.1 NA    NA    NA    NA    NA    NA    NA    NA   
 2     2     1  18.7  15.5  23.4 NA    NA    NA    NA    NA    NA    NA    NA   
 3     3     1  NA    NA    NA   NA    NA    NA    NA    NA    NA    NA    NA   
 4     3     1  20.0  15.5  23.4 NA    NA     1.32  2.78  1.44 NA    NA    NA   
 5     3     1  NA    NA    NA   NA    NA    NA    NA    NA    NA    NA    NA   
 6     3     1  NA    NA    NA   NA    NA    NA    NA    NA    NA    NA     1.51
 7     6     1  16.7  16.0  23.4  0.19 NA    NA    NA    NA    NA    NA    NA   
 8     6     1  NA    NA    NA   NA    NA     1.22  1.4   0.97  1.93  2.35  1.51
 9     6     1  19.3  16.4  25.8 NA    NA    NA    NA    NA    NA    NA    NA   
10     7     1  23.8  18.6  28.6 NA    NA    NA    NA    NA    NA    NA    NA   
11    12     2  28.8  24.4  39.7 NA    NA     1.13  1.89  1.32  2.46  3.21 NA   
12    13     2  24.6  19.6  29.4  0.16 NA     3.23  3.23  2.27 NA    NA    NA   
13    14     2  18.4  15.5  24.8 NA    NA     2.27  3.78  1.13  3.46  4.91  2.78
14    15     2  NA    NA    NA   NA    NA    NA    NA    NA    NA    NA    NA   
15    15     2  25.8  24.4  39.7 NA    NA    NA    NA    NA    NA    NA    NA   
16    16     2  NA    NA    NA   NA    NA    NA     1.89  2.99 NA    NA    NA   
17    16     2  22.1  17.3  26.9 NA    NA    NA     2.57  0.94 NA    NA     1.51
18    16     2  NA    NA    NA   NA    NA    NA    NA    NA    NA    NA    NA   

任何意见,将不胜感激。谢谢!

标签: rfunctiondplyrtidy

解决方案


推荐阅读