2015-05-14 5 views
1

есть более элегантный способ получить среднее значение для текущей до первой строки? Например,R, означающее, что для каждой n-й строки

x=replicate(3, rnorm(20)) 

, что я хочу, чтобы получить среднее значение столбца 2 для каждой строки + 2 строки до. То, как я сейчас это сделаю, это: 1) создать пустой столбец 2) пропустить каждую строку и получить значения из двух предыдущих строк, означать ее, а затем сохранить в новом столбце. Это утомительно, поэтому мне интересно, есть ли более чистый и быстрый метод? заранее спасибо. ahdee

ответ

2

Try filter - то, что вы делаете, является скользящим средним.

filter(x[,2], rep(1/3,3), sides=1) 
+0

thanks; среднее значение прокатки. Я googled вокруг и нашел зоопарк библиотеки, который отлично работает для меня. 'библиотека (зоопарк); rollapply (x [, 2], 2, mean, na.pad = 1, align = "right") ' – Ahdee

2

спасибо thelatemail, что я хотел, называется скользящим средним. Я нашел решение.

library(zoo) 
x=replicate(3, rnorm(20)) 

rollapply(x[,2], 2, mean, na.pad = 1, align="right") 
+1

Да, это эквивалентно фильтру (x [, 2], rep (1/2,2), сторонам = 1) 'из моего ответа. 'rollapply' является более общей версией такой же логики. Рад видеть, что ты разобрался. – thelatemail

 Смежные вопросы

  • Нет связанных вопросов^_^