从两个向量创建多个系列的向量

时间:2016-10-26 15:00:18

标签: r

我确信有一个超级简单的解决方案,我只是无法弄清楚它是什么。

我在R中有一个长的单变量数据集。我可以识别多个相关范围的开始和结束,我只需要过滤掉其余的。

所以给出了一个向量x:

> x <- c(2400:2600)

起点和终点的向量:

> startpoints <- c(1,11,101)
> endpoints <- c(3,13,103)

我需要返回看起来像这样的x子集:

> x[c(1:3, 11:13, 101:103)]
[1] 2400 2401 2402 2410 2411 2412 2500 2501 2502

我试过这个:

> x[startpoints:endpoints]

但是R只取每个向量的第一个值并返回该系列:

[1] 2400 2401 2402

......有几个警告

我的起点和终点矢量的长度应始终相等,尽管它们在长度上可能会因不同的数据集而变化。

1 个答案:

答案 0 :(得分:5)

我们可以使用mapply来获取“起始点”,“端点”的相应元素之间的序列,这可以对“x”向量进行子集化。

x[mapply(`:`, startpoints, endpoints)]
#[1] 2400 2401 2402 2410 2411 2412 2500 2501 2502

如果序列长度不同,如@nicola所述,mapply会返回list,所以我们需要unlist

x[unlist(mapply(`:`, startpoints, endpoints))]