【问题标题】:Average of n rowsn 行的平均值
【发布时间】:2011-10-17 17:45:18
【问题描述】:

我有一个包含三列的数据框:IdDateValue,并希望按平均值对其进行下采样:取接下来的 20 行,从这 20 行中构建 Value 的平均值并将其添加到具有相同结构的新数据框。 Date 应该是 20 行的第一个值。

我试过这种方式(可能很可怕:):

resample.downsample <- function(data, by=20)
{
  i <- 0
  nmax <- nrow(data)
  means <- c()
  while(i < nmax)
  {
    means <- c(means, mean(subset(data, Id > i & Id <= i+by)$Value))
    i <- i+by
  }
  return (
    data.frame(
      Id = seq(1, length.out=(nmax/by), by=1),
      Date = seq(startDate, length.out=(nmax/by), by=(1/by)), 
      Value = means  
    )
  )
}

这适用于小型数据集,但在我的真实数据集(约 4000000 行)上永远运行。任何想法如何优化此功能?

Sample-Data(输入、输出应具有相同的结构,类:整数、数字、POSIXct/POSIXt):

    Value   Id  Date
1   125 1   2011-06-30 22:41:50
2   127 2   2011-06-30 22:41:50
3   126 3   2011-06-30 22:41:50
4   123 4   2011-06-30 22:41:50
5   130 5   2011-06-30 22:41:50
6   131 6   2011-06-30 22:41:50
7   128 7   2011-06-30 22:41:50

【问题讨论】:

  • 一些数据样本会有所帮助...我不确定日期和 ID 的格式。

标签: r


【解决方案1】:

请参阅此答案以了解适合您的方法。 How to get the sum of each four rows of a matrix in R。在您的情况下,它将是:

colMeans(matrix(data$Value, nrow=20))

您当前获取第一个日期的方法应该没问题。

【讨论】:

  • 谢谢 :) (我只需要用 colMeans 替换 colSums)
猜你喜欢
  • 2015-02-04
  • 1970-01-01
  • 2021-11-08
  • 2022-01-01
  • 2015-10-19
  • 2020-11-14
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多