Рассчитать среднее значение столбца данных для каждых пяти переменных в R - PullRequest
0 голосов
/ 06 февраля 2020

Простой фрейм данных:

X2 <- runif(20, -2, 2)
X1 <- c(1:20)
data <- cbind(X1, X2)

Хотел бы рассчитать новый столбец данных, состоящий из среднего значения пяти точек данных из X2, для всего столбца; например, первая точка этого нового столбца является средним значением первых пяти точек от X2, точка 2 является средним значением вторых пяти точек и т. д. c. Новый столбец должен иметь четыре итоговых значения в этом примере. Я предполагаю, что это делается с помощью функции и приложения, но я не знаю, как поступить. Любая помощь будет оценена!

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Если вы не после скользящего среднего, вы можете сделать:

n_splits <- 5

transform(
  data,
  mean_X2 = ave(X2, ceiling(seq_along(X2)/n_splits), FUN = mean)
)

Идея состоит в том, что вы получаете только 4 различных значения (каждое для 1 среза из 5 строк):

   X1         X2    mean_X2
1   1  0.2450328  0.4765226
2   2 -0.2485971  0.4765226
3   3  0.1073639  0.4765226
4   4  1.6354394  0.4765226
5   5  0.6433740  0.4765226
6   6  1.6846952  0.4854171
7   7 -1.9208249  0.4854171
8   8  0.9209313  0.4854171
9   9  0.2554107  0.4854171
10 10  1.4868733  0.4854171
11 11  1.4396200 -0.4308499
12 12 -1.4503835 -0.4308499
13 13 -0.1566408 -0.4308499
14 14 -1.5484536 -0.4308499
15 15 -0.4383918 -0.4308499
16 16  0.6936388  1.0445175
17 17  0.1052725  1.0445175
18 18  0.9264836  1.0445175
19 19  1.8322978  1.0445175
20 20  1.6648948  1.0445175

Данные:

set.seed(3243)

X2 <- runif(20, -2, 2)
X1 <- c(1:20)
data <- cbind(X1, X2)
0 голосов
/ 07 февраля 2020

Вы ищете rollmean, например, в пакете zoo или в data.table:

library(data.table)
set.seed(1)
data <- data.table(X1=seq_len(20), X2=runif(20, -2, 2))
data[, rm := frollmean(data$X2, 5, align = "left")]
data
#>     X1           X2          rm
#>  1:  1 -0.937965347 -0.14369948
#>  2:  2 -0.511504401  0.36260534
#>  3:  3  0.291413453  0.82064643
#>  4:  4  1.632831160  0.89100197
#>  5:  5 -1.193272276  0.66772698
#>  6:  6  1.593558740  0.55581045
#>  7:  7  1.778701074  0.00187836
#>  8:  8  0.643191170 -0.61261645
#>  9:  9  0.516456176 -0.59163641
#> 10: 10 -1.752854918 -0.78764467
#> 11: 11 -1.176101700 -0.22120055
#> 12: 12 -1.293772990  0.01217918
#> 13: 13  0.748091387  0.44502859
#> 14: 14 -0.463585127  0.68893519
#> 15: 15  1.079365680  0.68568036
#> 16: 16 -0.009203032  0.69176340
#> 17: 17  0.870474033          NA
#> 18: 18  1.967624379          NA
#> 19: 19 -0.479859282          NA
#> 20: 20  1.109780885          NA
...