我有一些看起来像这样的数据:
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解决方案。谢谢!
答案 0 :(得分:1)
您可以像这样递归地计算mean
。
重新组织后,均值(不包括一个数字)可以像这样重写:
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