簡體   English   中英

在向量的多個間隔上應用中位數

[英]apply median on multiple intervals of a vector

我有一個數值向量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到代表rowEnd的向量x的中位數。 我已經有一個可行的解決方案:

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

我可以輕松地將其轉換為適用的方法,但是我正在尋找一種更有效的方法。 我還考慮過通過使用間隔將向量拆分為一個列表,然后在每個列表元素上應用中位數。 有什么建議嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM