R:查找平均值的列,从平均值中排除该行的值

时间:2020-05-12 17:03:20

标签: r dplyr

我有一些看起来像这样的数据:

ID isnr MS  position
20  332 LV  0
21  332 MT  100
22  332 NL  0
23  332 PL  100
24  332 PT  100
25  332 RO  100
26  332 SE  0
27  332 SI  0
28  332 SK  0
29  332 UK  0
30  333 AT  0
31  333 BE  0
32  333 BU  0
33  333 COM 80
34  333 CR  100
35  333 CY  100
36  333 CZ  0
37  333 DE  100
38  333 DK  0
39  333 EE  0

对于每行,我想找到isr的位置平均值,不包括该行的位置值。因此,对于第一行,它是332的平均值,不包括“ LV”或ID20。理想情况下,我正在寻找一种dplyr解决方案。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以像这样递归地计算mean

enter image description here

重新组织后,均值(不包括一个数字)可以像这样重写:

Avg(N-1)=(Avg(N)* N-第N个元素)/(N-1)

library(dplyr)
df %>%
  group_by(isnr) %>%
  mutate(my_mean=(mean(position) * n() - position) / (n()-1) ) 

# A tibble: 20 x 5
# Groups:   isnr [2]
      ID  isnr MS    position my_mean
   <int> <int> <chr>    <int>   <dbl>
 1    20   332 LV           0    44.4
 2    21   332 MT         100    33.3
 3    22   332 NL           0    44.4
 4    23   332 PL         100    33.3
 5    24   332 PT         100    33.3
 6    25   332 RO         100    33.3
 7    26   332 SE           0    44.4
 8    27   332 SI           0    44.4
 9    28   332 SK           0    44.4
10    29   332 UK           0    44.4
11    30   333 AT           0    42.2
12    31   333 BE           0    42.2
13    32   333 BU           0    42.2
14    33   333 COM         80    33.3
15    34   333 CR         100    31.1
16    35   333 CY         100    31.1
17    36   333 CZ           0    42.2
18    37   333 DE         100    31.1
19    38   333 DK           0    42.2
20    39   333 EE           0    42.2
相关问题