Полагаю, что-то подобное нужно было задавать раньше, однако я смог найти ответ только для python и SQL. Поэтому, пожалуйста, сообщите мне в комментариях, когда об этом также попросили R!
Данные
Допустим, у нас есть такой фрейм данных:
set.seed(1); df <- data.frame( position = 1:20,value = sample(seq(1,100), 20))
# In cause you do not get the same dataframe see the comment by @Ian Campbell - thanks!
position value
1 1 27
2 2 37
3 3 57
4 4 89
5 5 20
6 6 86
7 7 97
8 8 62
9 9 58
10 10 6
11 11 19
12 12 16
13 13 61
14 14 34
15 15 67
16 16 43
17 17 88
18 18 83
19 19 32
20 20 63
Цель
Мне интересно вычислить среднее value
для n
позиций и вычесть это из среднего value
следующих n
позиций скажем n=5
пока.
То, что я пробовал
Я сейчас использовал этот метод, однако, когда я применяю его к большему кадру данных, это занимает огромное количество времени, и, следовательно, интересно, есть ли более быстрый метод для этого.
calc <- function( pos ) {
this.five <- df %>% slice(pos:(pos+4))
next.five <- df %>% slice((pos+5):(pos+9))
differ = mean(this.five$value)- mean(next.five$value)
data.frame(dif= differ)
}
df %>%
group_by(position) %>%
do(calc(.$position))
, который приводит к следующей таблице:
position dif
<int> <dbl>
1 1 -15.8
2 2 9.40
3 3 37.6
4 4 38.8
5 5 37.4
6 6 22.4
7 7 4.20
8 8 -26.4
9 9 -31
10 10 -35.4
11 11 -22.4
12 12 -22.3
13 13 -0.733
14 14 15.5
15 15 -0.400
16 16 NaN
17 17 NaN
18 18 NaN
19 19 NaN
20 20 NaN