2016-07-14 2 views
0

У меня есть набор данных с уровнем радиации в час. Мне нужно получить средний уровень излучения за предыдущие 6 часов. Итак, для точки c мне нужно: среднее значение (данные $ STRALING [(c-7) :(c-1)])Получить среднее значение за предыдущие 6 часов в R

Это было бы решением моей проблемы, если набор данных, где будет завершен (это isn ' t, иногда хватает нескольких часов), и я понятия не имею, как автоматизировать его без петли (чего я бы хотел избежать, так как есть отметка 199056)

У меня есть данные в кадре данных с излучением и время в формате POSIXct:

  GLOBALE_STRALING    POSTIME 
    1383116    98 2016-06-10 18:00:00 
    1383118    55 2016-06-10 19:00:00 
    1383125    26 2016-06-10 20:00:00 
    1383130    6 2016-06-10 21:00:00 
    1383137    0 2016-06-10 22:00:00 
    1383142    0 2016-06-10 23:00:00 

Я растрескивание моего мозга на этом некоторое время теперь, я надеюсь, что функция существует для этого, что я не догадывался. Заранее спасибо.

+0

Добро пожаловать CV. Здесь мы имеем дело главным образом с статистическими вопросами, а не с вычислительными. Если вы запрашиваете методы устранения недостающих значений, это будет по теме. Если вы просто запрашиваете функцию в R для достижения ваших вычислений, тогда этого не будет. –

+1

Функция 'rollapply' в пакете' zoo' может быть полезна. Или функция 'rollmean'. –

+0

@Sjoerd - «apply» может быть довольно быстрым (для R). R не известен в значительной степени похож на скорость - это не его ценностное предложение. – EngrStudent

ответ

0

Я не совсем уверен, если это отвечает вашим потребностям, но я даю ему попробовать:

library(dplyr) 

# define start value for date, which is assumed to be the 
# last value in the time-vector 
start <- dat$POSTIME[nrow(dat)] 

# compute difference of all time points in relation 
# to latest time point in data set 
dat$hours <- as.vector(difftime(start, dat$POSTIME, units = "hours")) 

# create a "grouping" vector, where all 6-hours-span-timepoints 
# are grouped together 
dat$grp <- as.integer(dat$hours/6) 

# group by 6-hours-span and compute mean for each 
# 6-hours time-period 
dat %>% group_by(grp) %>% summarise(mean(STRALING)) 
Смежные вопросы