如何从切割点矢量计算中点或中位数的向量?

时间:2015-11-04 23:18:35

标签: r

假设我有一个切点向量,为了这个问题的目的,生成如下:

> seq(0,50,10)
[1]  0 10 20 30 40 50

这是一个长度为6的数字向量。我想生成一个中点的数字向量,以获得以下任何一个(两者都符合我的要求),长度减去一个切口(在这种情况下, 5)。

# midpoints, exactly
5 15 25 35 45
# medians excluding right
4.5 14.5 24.5 34.5 44.5

没有找到预先滚动的函数,我开发了一个过程,它以数字向量作为参数(切割点)并返回一个向量(中点)。它通过获取索引1和索引2的中位数并将其附加到向量,然后是索引2和索引3的中位数,依此类推,直到最后一个索引为NULL。

当然,我不能成为第一个有此需求的人。有没有这样的程序包?我不介意自己滚动,但老实说,我宁愿使用一个受到公众严格审查的包裹。

由于

2 个答案:

答案 0 :(得分:9)

分开差异?

a <- seq(0,50,10)
a[-length(a)] + diff(a)/2

答案 1 :(得分:5)

使用filter的另一种尝试,它允许您在中间加权中点,或者在左侧或右侧加权某个程度:

x <- seq(0,50,10)

head(filter(x, c(0.5,0.5)), -1)
#[1]  5 15 25 35 45

head(filter(x, c(0.75,0.25)), -1)
#[1]  7.5 17.5 27.5 37.5 47.5

head(filter(x, c(0.25,0.75)), -1)
#[1]  2.5 12.5 22.5 32.5 42.5