Получить индексы позиции после минимальной / максимальной агрегации на матрице - PullRequest
3 голосов
/ 27 июня 2019

Продолжение моей первой проблемы здесь ( Как агрегировать почасовые значения в средние значения за 24 часа без метки времени ).Теперь я хочу рассчитать максимальное (и минимальное) из моих временных рядов каждого 12-часового интервала.

У меня есть почасовые данные измерений (data_measure).Теперь я изменил его во временные ряды по полдня.

t_measure <- ts(data = data_measure, frequency = 12)

, затем я использовал статистическую функцию из {stats}

data_measure_daily_max <- aggregate(t_measure, 1, max)

data_measure <- structure(c(8.29, 7.96, 8.14, 7.27, 7.37, 7.3, 7.23, 7.53, 
7.98, 10.2, 12.39, 14.34, 14.87, 14.39, 12.54, 11.84, 10.3, 10.62, 
10.65, 10.56, 10.43, 10.35, 9.85, 9.12, 8.95, 8.82, 8.92, 9.33, 
9.44, 9.3, 9.15, 9.37, 9.54, 10.24, 12.13, 12.43, 12.65, 13, 
13.18, 13.58, 13.64, 13.75, 13.85, 13.94, 13.79, 13.84, 13.94, 
14.26, 24.93, 24.64, 23.67, 21.46, 21.33, 20.83, 21.12, 21.1, 
23.75, 25.39, 30.72, 30.71, 30.81, 30.92, 32.61, 32.37, 32.49, 
30.68, 30.23, 30.45, 28.1, 26.9, 25.09, 25.07, 24.59, 24.22, 
23.05, 22.21, 22.07, 21.6, 21.24, 21.22, 21.85, 24.87, 28.85, 
29.42, 30.82, 30.97, 31.32, 30.81, 30.83, 29.9, 30.01, 30.31, 
30, 27.91, 25.78, 25.88, 8.78, 8.47, 8.49, 7.65, 8.63, 9.02, 
9.02, 8.11, 7.63, 9.19, 11.25, 12.24, 13.62, 12.09, 10.6, 11.1, 
10.16, 10.44, 9.58, 10.04, 10.01, 10.23, 9.51, 9.2, 9.34, 9.6, 
9.4, 9.45, 9.36, 9.26, 9.3, 9.46, 9.58, 9.89, 10.6, 11.04, 12.1, 
12.61, 13.12, 13.47, 13.55, 13.51, 13.63, 13.84, 13.93, 14.17, 
13.97, 13.86), .Dim = c(48L, 3L), .Dimnames = list(NULL, c("station1", 
"station2", "station3")))

Так что на самом деле мне нужен индекс / вектор, которыйговорит мне, где мои максимальные и минимальные значения этих временных интервалов, поэтому позже я могу извлечь именно эти значения для других наборов данных, чтобы сделать сравнение.

Мое первое испытание:

max_index <- which(aggregate(t_measure, 1, max))   # argument to 'which' is not logical

1 Ответ

3 голосов
/ 27 июня 2019

Используйте which.max и which.min с aggregate

a1 <- aggregate(t_measure, 1, which.min)
a2 <- aggregate(t_measure, 1, which.max)

a1
#Time Series:
#Start = 1 
#End = 4 
#Frequency = 1 
#  station1 station2 station3
#1        7        6        9
#2       12       12       12
#3        2        8        6
#4        1       11        1

a2
#Time Series:
#Start = 1 
#End = 4 
#Frequency = 1 
#  station1 station2 station3
#1       12       11       12
#2        1        3        1
#3       12       12       12
#4       12        3       10

Если вам нужен индекс для min со ссылкой на оригинальный data_measure фрейм данных, мы можем сделать

vals <- nrow(t_measure)/12 
index_min <- a1 + (12 * (seq_len(vals) - 1))
index_min

#Time Series:
#Start = 1 
#End = 4 
#Frequency = 1 
#  station1 station2 station3
#1        7        6        9
#2       24       24       24
#3       26       32       30
#4       37       47       37

Это можно прочитать как для station1 в 1-м 12-часовом интервале. Максимальное значение присутствует в 7-м ряду data_measure, в течение следующих 12-часового интервала оно присутствует в 24-м ряду и аналогично для других станций.

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