假设我们有以下的载体:从迭代向量提取元素进一步的操作
x <- c(2, 13, 9, 12, 10, 19, 15, 17, 14, 3, 8, 20, 16, 4, 18, 6, 5, 1, 7, 11)
由于是明显的,矢量,让我们把它叫做X,有20个观测。
现在,想象一下以下内容:
k = 3
而且,我们要提取(I + K-1)X/2个元素,得到一个新的载体,把它叫做 “小X”。
这意味着,对于第一元件,I = 1,I将提取下列元件:
for i = 1, extract (1+3-1)/2 = 3/2 = 1.5
换句话说,所述1.5th元件,其中,当舍入变为2,从而使元件我正在提取的实际上是i = 2,在这种情况下是13.
如何循环遍历向量并迭代应用相同的过程,最终得到一个包含每个(i + k) -1)/ 2个元素?
谢谢。
小编辑
这是要求的“小X”具有长度18 为什么的原因如下:
我有含第(i + K-中观察到的残留物的载体1)/ 2从滚动线性模型。这个向量长度为18,被称为“detrends”。
我想从X的(i + k-1)/ 2个元素中减去“detrends”以获得长度为18的第四个向量Y,称为“Y”。
因此,“detrends”和向量“小X”应该具有相等的长度。
我Y的结果应该是:
{8., 11.3333, 10.3333, 13.6667, 14.6667, 17., 15.3333, 11.3333, 8.33333,
10.3333, 14.6667, 13.3333, 12.6667, 9.33333, 9.66667, 4., 4.33333, 6.33333}
鉴于detrends是:
{5.0000000 -2.3333333 1.6666667 -3.6666667 4.3333333 -2.0000000 1.6666667
2.6666667 -5.3333333 -2.3333333 5.3333333 2.6666667 -8.6666667 8.6666667
-3.6666667 1.0000000 -3.3333333 0.6666667}
考虑下面的一些评论,我发现的一些内容被复制过于频繁。虽然我得到了一些正确的数字,但它们并不正确。
有人能澄清我怎样才能得到所需的输出为Y,即:
{8., 11.3333, 10.3333, 13.6667, 14.6667, 17., 15.3333, 11.3333, 8.33333,
10.3333, 14.6667, 13.3333, 12.6667, 9.33333, 9.66667, 4., 4.33333, 6.33333}
其中:
Y = "little X" - "detrends"
感谢。
编辑2
虽然Odysseus210提供在以上规定的问题的适当方法,有在我配制问题代码的方式的小的误差。事实上,我没有得到准确的订单的原因是因为我一直在寻找:
i +((k-1)/ 2))而不是(i + k-1)/ 2。这意味着Odysseus210的回答应该是:
x[sapply(1:(length(x) - 2), function(i) { i + round(((k - 1)/2)) })]
请注意,在舍入步骤之前应该包括我。 此调整提供了我正在寻找的正确数字。
我想感谢大家的帮助,无论如何。
不要循环。使用申请系列的其中一项功能。如'sapply()'。请参阅下面的答案。理解循环很好。但实际上,对于快速代码,请使用apply系列。 – Odysseus210
'k < - 3; i < - c(1,10); x [round((i + k-1)/ 2)]' – Roland
谢谢罗兰。你的答案有一些小问题,但直觉对我很好。 – Mattia