Среднее из всех значений сигнала, прежде чем они упадут до минимума - PullRequest
1 голос
/ 28 марта 2019

у меня есть следующие данные: мне нужно взять среднее значение всех значений, пока оно не упадет до минимального значения, как показано на рисунке ниже. Мне нужно взять среднее значение всех этих значений в выделенной области (красным)

problem illustration

Sample data of signal:
3
3.1
3
3.2
3
3.1
3.2
3
3
3.05
3.25
3.21
3.2
0.4
0.48
0.51
0.65
0.92
1.4
2
3.2
3
3.5

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Вы можете найти index минимального значения и подмножества значений до этой точки и вычислить mean, например:

dat <- c(3, 3.1, 3, 3.2, 3, 3.1, 3.2, 3, 3, 3.05, 3.25, 3.21, 3.2, 0.4, 0.48, 0.51, 0.65, 0.92, 1.4, 2, 3.2, 3)
mean(dat[seq(max(which.min(dat)[1]-1, 1))])
[1] 3.100769

Или используя dplyr как:

library(dplyr)
tibble(dat) %>%
  filter(row_number() < which.min(dat)) %>%
  summarise(mean = mean(dat))
# A tibble: 1 x 1
   mean
  <dbl>
1  3.10
1 голос
/ 28 марта 2019

Поскольку нам нужно найти среднее количество точек, прежде чем оно упадет до минимального значения, создать логический вектор (v1 <= min(v1)), получить кумулятивный максимум, преобразовать TRUE в NA и FALSE в 1, умножить на очки и получитьmean с na.rm как ИСТИНА

with(df1, mean(v1 * NA^(cummax(v1 <= min(v1))), na.rm = TRUE))
#[1] 3.100769

данные

df1 <- structure(list(v1 = c(3, 3.1, 3, 3.2, 3, 3.1, 3.2, 3, 3, 3.05, 
 3.25, 3.21, 3.2, 0.4, 0.48, 0.51, 0.65, 0.92, 1.4, 2, 3.2, 3, 
  3.5)), class = "data.frame", row.names = c(NA, -23L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...