我有两个相关的问题,首先我如何以固定间隔分割矢量并将函数应用于每个间隔,然后如何将矢量以规则的间隔分割成数据帧,其中每个间隔是数据帧的一行。之前已经提出了第一个问题,并且在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位)
答案 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)