假设我有一个像这样的数据集:dat <- rnorm(25)
和一个向量,代表我的数据的特定索引:v <- c(1, 8, 13, 17, 25)
如何计算以下间隔的平均值:1-1、1-8、8-13、13-17、17-25?
总的来说:我想根据有意义的索引向量dat
在v
内平均特定间隔,但也很不规则。
最佳答案
您可以使用cut
获取间隔组,并使用aggregate
计算每个组的mean
。
aggregate(dat, list(interval=cut(seq(dat), c(0,v))), mean)
# interval x
#1 (0,1] -0.5604756
#2 (1,8] 0.3484638
#3 (8,13] 0.1704305
#4 (13,17] 0.4599013
#5 (17,25] -0.6754733
或者,如果您希望间隔在第一个位置和最后一个位置重叠,则可以使用
sapply
。sapply(seq(v), function(i) mean(dat[v[max(1,i-1)]:v[i]]))
#[1] -0.56047565 0.23484641 -0.06881816 0.44807533 -0.54510397