首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化下采样代码

优化下采样代码
EN

Stack Overflow用户
提问于 2015-12-08 13:04:56
回答 1查看 232关注 0票数 4

我有一张这样的桌子,是flyTracesFiltered。

代码语言:javascript
复制
     Time    Right     Left
1 0.000000000 18.21980 30.98789
2 0.009222031 22.15157 37.18590
3 0.022511959 25.63218 42.49231
4 0.029854059 28.43851 46.57811
5 0.039320946 30.43885 49.29414
6 0.052499056 31.60561 50.67852

我想做的是按期减少样本。也就是说,我想在一定的时间内平均所有的值,以减少样本的数量。在我的例子中,我使用了0.05秒的平均值(20 my )。我的函数看起来是这样的:

代码语言:javascript
复制
flyDataDownsampleTime <- function(flyTracesFiltered, samplePeriod) {

  AvgRight<-NULL
  FlyDataRight<-NULL
  AvgLeftt<-NULL
  FlyDataLeft<-NULL
  AvgTime<-NULL
  FlyDataTime<-NULL


  for (i in seq(0,ceiling(max(flyTracesFiltered$Time)),samplePeriod)){

  AvgRight <-mean(flyTracesFiltered$Right[flyTracesFiltered$Time>=i & flyTracesFiltered$Time <= (i+samplePeriod)])  
  FlyDataRight<-c(FlyDataRight,AvgRight)

  AvgLeft <-mean(flyTracesFiltered$Left[flyTracesFiltered$Time>=i & flyTracesFiltered$Time <= (i+samplePeriod)])  
  FlyDataLeft<-c(FlyDataLeft,AvgLeft)

  AvgTime <-mean(flyTracesFiltered$Time[flyTracesFiltered$Time>=i & flyTracesFiltered$Time <= (i+samplePeriod)])  
  FlyDataTime<-c(FlyDataTime,AvgTime)
}
flyTracesDownTime <- data.frame("Time" = FlyDataTime, "Right" = FlyDataRight, "Left" = FlyDataLeft)

return(flyTracesDownTime)
}

我想问一问是否有一个方法来改善这一点,因为它需要很长时间的大数据。当我需要迭代时(因为索引),我在实现apply家族函数时遇到了问题。我还读过关于Vectorize函数的文章,但我不知道这是否能使代码更有效。有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-08 13:55:39

您可以创建一个新字段,例如,group_num

代码语言:javascript
复制
flyTracesFiltered$group_num <- floor(flyTracesFiltered$Time/0.05)

其中0.05段是你想缩短样本的时间空间。在这个领域里聚集起来就像-

代码语言:javascript
复制
flyTracesFiltered2 = aggregate(flyTracesFiltered$Right,
                     list(group_num=flyTracesFiltered$group_num), mean)

这将为您提供一个新的数据框架,其中包含每个group_num的平均值。

您可以对其他列(左)进行同样的操作,并合并数据帧或只添加新列。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34156665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档