[英]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.