我已经从数据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行等的平均值。我必须对数百行执行此操作。有更简单的方法吗?
答案 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步,它没有提供相同级别的控制。