定期向矢量应用函数

时间:2014-09-25 13:49:03

标签: r

我有两个相关的问题,首先我如何以固定间隔分割矢量并将函数应用于每个间隔,然后如何将矢量以规则的间隔分割成数据帧,其中每个间隔是数据帧的一行。之前已经提出了第一个问题,并且在rollapply()中使用zoo似乎有一个漂亮的解决方案,但是当我尝试安装它时,我被告知zoo无法用于R 3.1.1。

我有工作解决方案,但我不喜欢我必须创建额外的索引变量才能使它们正常工作。任何更简单的解决方案?

第1部分定期应用函数

d <- data.frame(Value=rnorm(1000,100,20),   #create random values
                y=factor(rep(1:100,each=10)), # create a group variable
                t=factor(rep(1:10, 100))) # create an observation # variable numbering
                                          # observation 1-10

data.frame(tapply(d$Value, FUN=mean, INDEX=d$y)) #take mean of observations by group

第2部分 将矢量拆分为数据帧。

library(reshape2)
dcast(data=d, y~t, value.var='Value')

R版本3.1.1(2014-07-10) 平台:x86_64-w64-mingw32 / x64(64位)

1 个答案:

答案 0 :(得分:2)

如您所述,实现分组均值的一种方法是使用zoo::rollapply。这可以按如下方式完成:

rollapply(d$Value, width=10, by=10, FUN=mean)

或者,将d$value转换为matrix(或data.frame,但前者通常更有效,并且当所有列都是一致模式时通常更合适,例如数字),并计算行平均值。例如:

m <- matrix(d$value, byrow=TRUE, ncol=10)
rowMeans(m)

或者,对于任何给定的函数f

apply(m, 1, f)