#r
#r
Вопрос:
у меня есть следующие данные: мне нужно взять среднее значение всех значений, пока оно не упадет до минимального значения, как показано на рисунке ниже. Мне нужно взять среднее значение всех этих значений в выделенной области (красным)
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
Комментарии:
1. сначала вам нужно определить оба термина — «до» и «минимальный».
Ответ №1:
Вы можете найти 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
Ответ №2:
Поскольку нам нужно найти среднее значение точек до того, как оно упадет до минимального значения, создайте логический вектор ( v1 <= min(v1)
), получите кумулятивный максимум, преобразуйте TRUE в NA и FALSE в 1, умножьте на точки и получите mean
с na.rm
значением TRUE
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))
Комментарии:
1.
NA^0
equals1
— потрясающее событие дня!