假设我有一个切点向量,为了这个问题的目的,生成如下:
> 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。
当然,我不能成为第一个有此需求的人。有没有这样的程序包?我不介意自己滚动,但老实说,我宁愿使用一个受到公众严格审查的包裹。
由于
答案 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