【问题标题】:How to calculate a vector of midpoints or medians from a vector of cut points?如何从切点向量计算中点或中值向量?
【发布时间】:2015-11-04 23:18:34
【问题描述】:

假设我有一个切点向量,就这个问题而言,生成如下:

> 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。

当然,我不可能是第一个有这种需求的人。有这样的程序包吗?我不介意自己滚动,但老实说,我更愿意使用经过严格审查的包装。

谢谢

【问题讨论】:

  • 将 diff(vec) 添加到 head(vec, -1)
  • @BondedDust - diff(vec)/2 确定吗?

标签: r


【解决方案1】:

分差?

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

【讨论】:

  • 是的,尼尔,谢谢。我犹豫是否公开我的解决方案,我的大脑已经被 Perl 腌制了,但这是我的尝试。给出与您相同的结果,但您的显然要好得多。 +1。 t
【解决方案2】:

使用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

【讨论】:

  • 也可用于x 定义的内联(不需要存储x),例如head(filter(1:10, c(.5, .5)), -1)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 2015-08-06
  • 2019-11-10
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
相关资源
最近更新 更多