2012-04-10 94 views
0

我想找出一种方法来增加向量元素的数量,以便在绘制这些向量的值时去除可见的角效应。举例来说,假设我有包含每10个元素的两个向量:在R中增加向量分辨率

a = c(4,2,10,5,3,4,8,9,6,2) 
b = seq(0,4.5, by=0.5) 

他们受到数据平滑,但我想,以增加他们的“分辨率”比10(长度),以获得更多的预测点。所以,换句话说,采用向量a,并在保持其一致性的同时加倍(例如)其元素的数量。将所得的载体应是这样的:

a = c(4,3,2,6,10,7,5,4,3,4,6,8,8.5,9,7.5,6,4,2,2) 

。当然,在这种特殊情况下,我很容易计算的元件的平均成对。但我想有一个任意长度的广义方法。我曾尝试用:

seq(a[1],a[10], length.out=20) 

但当然,因为只有向量的第一个和最后一个元素都采取了在考虑这个没有做这项工作。它适用于第二个矢量b虽然(其中包含横坐标值)。 任何帮助,将不胜感激。谢谢。 Marius。

+0

您认为“保持其一致性”意思不是很清楚吗?只要符合最小值和最大值就可以了。 – Hansi 2012-04-10 12:15:19

+0

你可能喜欢'splinefun'或'approxfun' – 2012-04-10 12:28:35

+0

不,要得到任意两个连续的向量元素* a *并且在它们之间再加上2或3或者任何均匀分布的元素,但要尊重向量。例如,如果最初a [5] = 4和a [6] = 7和a [7] = 5,我在a [5]和a [6]之间以及a [6]和a [ 7]该矢量片应该是a1 [5] = 4; a1 [6] = 5,a1 [7] = 6,a1 [8] = 7,a1 [9] = 6.34,a1 [10] = 5.68,a1 [11] = 5,初始a [5] = a1 [5],a [6] = a1 [8]和a [7] = a1 [11] – Marius 2012-04-10 12:32:00

回答

2

你只是想要基于b序列的线性插值?

f <- approxfun(b, a) 
f(seq(b[1], b[length(b)], length = 20)) 
[1] 4.000000 3.052632 2.105263 5.368421 9.157895 8.157895 5.789474 4.368421 3.421053 3.263158 3.736842 4.842105 6.736842 8.157895 8.631579 8.684211 7.263158 5.789474 
[19] 3.894737 2.000000 

其他形式的内插,也?round以各种方式完善这个值见?approx其他的选择及其See also

+0

不,我已经使用seq()函数获得了线性插值,但是我的大部分数据都描述了一条二次曲线,这就是为什么我指定要保持向量的一致性。但我会看看大约一轮。 – Marius 2012-04-10 12:38:37

+0

您可能会惊讶地发现,只要使用默认设置即可很好地匹配数据或splinefun,特别是如果增加点数 - 不确定“一致性”是什么意思。 – mdsumner 2012-04-10 12:53:14

+0

从我看到的approxfun做交易。感谢您的快速答复。我也用splinefun,但我需要一个样条函数的自定义行为,这就是为什么我创建了自己的。再次,approxfun产生想要的结果。谢谢! – Marius 2012-04-10 12:56:49