R列中n值的平均值-重复

时间:2018-10-25 17:30:58

标签: r average repeat

我已经从数据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 :(得分:1)

首先,组成一个数据集,因为您尚未发布数据集。

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

答案 1 :(得分:1)

Zoo库具有几个用于处理顺序操作的功能。可以使用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步,它没有提供相同级别的控制。