如何在点之间干净地使用插值来生成R中的均值

时间:2015-11-11 20:27:21

标签: r interpolation mean

我在尝试使用插值基于简单的点图生成一个能够干净地产生均值(特别是加权平均值)的代码时遇到了问题。

例如;

ex=c(1,2,3,4,5)
why=c(2,5,9,15,24)

这显示了我正在使用的信息类型。

plot(ex, why, type="o")

此时,我希望实际上有每个点" binned"所以它们之间的线条笔直。为此,我一直在excel中手动添加x值作为(x + 0.01)。 这是新的输出:

why=c(2,2,5,5,9,9,15,15,24,24)
ex=c(1,2,2.01,3,3.01,4,4.01,5,5.01,6)
plot(ex, why, type="o")

所以这就是我的问题所在。我必须多次这样做,并且不想生成大量新的矢量和对象。为了获得加权平均值,我一直在使用插值到新对象中插入x的增量为0.01的y值。然后,当一个点落在实际的ex值之间时,我就可以进入这个新对象并得到一个平均值,即

mean(newy[1:245])

因为我为x的100个增量创建了新的y值(基本上)遵循一条直线,所以我在这里得到加权平均值x = 1到2.45。

是否有更简单,更优雅的方法将插值代码嵌入到平均代码中,因此我可以说"非真实x的插值y的平均值为非真实x?"

2 个答案:

答案 0 :(得分:1)

它并没有完全符合您的要求,但您应该考虑v=spf1 a:app30.absorbstaging.com ~all函数 - 这会创建两个系列中的步进函数。

stepfun

plot(stepfun(ex[-1], why)) 非常方便,因为它为您提供了在该时间间隔内定义的函数,因此您可以通过在任何地方进行评估来轻松进行插值。它的缺点是它没有严格定义给定的范围(这就是为什么我们必须切断stepfun中的第一个值。)

step function

答案 1 :(得分:0)

根据您的第二个绘图示例,我认为您可能正在寻找这个:

library(ggplot2)
qplot(ex, why, geom="step")

这给出了:

enter image description here

或者如果您希望线路首先垂直,您可以使用:

qplot(ex, why, geom="step", direction = "vh")

给出:

enter image description here