применить медиану на нескольких интервалах вектора - PullRequest
0 голосов
/ 07 марта 2019

У меня есть числовой вектор x и data.frame startEnd, включая столбцы с начальными и конечными строками.

> head(x)
23.80077 23.72072 23.64067 23.56062 23.48056 23.40051

> head(startEnd)
  rowStart rowEnd
1       43    435
2      486    887
3      898   1325
4     1327   1742
5     1757   2196
6     2220   2646

Я хотел бы рассчитать медиану вектора x от каждого rowStart до repsective rowEnd. У меня уже есть рабочее решение:

for(i in 1:nrow(startEnd)){
    x_median[i] = median(x[startEnd$rowStart[i]:startEnd$rowEnd[i]])
}

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

1 Ответ

0 голосов
/ 07 марта 2019
x <- rnorm(3000) + 23
startEnd <- data.frame(
  rowStart = c(43L, 486L, 898L, 1327L, 1757L, 2220L),
  rowEnd = c(435L, 887L, 1325L, 1742L, 2196L, 2646L)
)

mapply(function(s, e) {median(x[s:e])}, startEnd[["rowStart"]], startEnd[["rowEnd"]])

# [1] 23.12682 23.10009 22.99902 22.99883 23.08723 23.01746
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...