Среднее из n строк - PullRequest
       5

Среднее из n строк

4 голосов
/ 02 августа 2011

У меня есть фрейм данных с тремя столбцами: Id, Date и Value, и я хочу уменьшить это значение в среднем: взять следующие 20 строк, построить среднее значение Value из этих 20 строк и добавить его в новый фрейм данных с той же структурой. 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

1 Ответ

4 голосов
/ 02 августа 2011

См. Этот ответ для метода, который должен работать для вас. Как получить сумму каждых четырех строк матрицы в R . В вашем случае это будет:

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

Ваш текущий метод получения первой даты должен быть в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...