在向量的多个间隔上应用中位数

时间:2019-03-07 11:19:03

标签: r

我有一个数字向量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

我想计算从每个rowStart到代表行endEnd的向量x的中位数。我已经有一个可行的解决方案:

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

我可以很容易地将其转换为申请书,但我正在寻找一种更有效的方法。我还考虑过通过使用间隔将向量拆分为一个列表,然后在每个列表元素上应用中位数。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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