Среднее из n значений в столбце в R - повторить - PullRequest
0 голосов
/ 25 октября 2018

Я создал фрейм данных из данных x:

  d1 <- data.frame(x$length, x$weight, x$volume)

И второй фрейм данных:

  d2 <- data.frame(
    mean1 <- mean(d1$x.volume[1:5]),
    mean2 <- mean(d1$x.volume[6:10]),
    mean3 <- mean(d1$x.volume[11:15]),
    mean4 <- mean(d1$x.volume[16:20]))

Поэтому я пытаюсь найти среднее для первых 5 строк, следующие 5 и т. д. Я должен сделать это для сотен строк.Есть ли более простой способ сделать это?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Библиотека зоопарка имеет несколько функций для обработки последовательных операций.Это можно обработать с помощью rollapply, используя 5 в качестве параметра by=:

library(zoo)

set.seed(42)
 n <- 1000
 d1 <- data.frame(x.volume = rnorm(n))
 d1.means.by5 <- rollapply(d1, width=5, FUN=mean, by=5)
 str(d1.means.by5)
num [1:200, 1] 0.441 0.653 0.358 -0.685 0.17 ...
- attr(*, "dimnames")=List of 2
 ..$ : NULL
 ..$ : chr "x.volume"

Сначала я посмотрел страницу справки для rollmean, но она не предлагала такой же уровень контроляо шаге вперед на 5.

0 голосов
/ 25 октября 2018

Сначала создайте набор данных, поскольку вы его не опубликовали.

set.seed(1)
n <- 100
d1 <- data.frame(x.volume = rnorm(n))

Теперь вы можете aggregate для переменной, в которой 5 одинаковых элементов в строке.Трюк cumsum создаст такую ​​переменную.

by <- 5
fac <- c(1, rep(0, times = by - 1))
fac <- cumsum(rep(fac, length.out = n))

agg <- aggregate(x.volume ~ fac, d1, mean)
head(agg)
#  fac    x.volume
#1   1  0.12926990
#2   2  0.13513567
#3   3  0.03812297
#4   4  0.45956697
#5   5  0.08123054
#6   6 -0.34857703
...