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

Fra*_*247 2 r

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

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

所以给出一个向量x:

> x <- c(2400:2600)
Run Code Online (Sandbox Code Playgroud)

以及起点和终点的向量:

> startpoints <- c(1,11,101)
> endpoints <- c(3,13,103)
Run Code Online (Sandbox Code Playgroud)

我需要返回x的子集,如下所示:

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

我试过这个:

> x[startpoints:endpoints]
Run Code Online (Sandbox Code Playgroud)

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

[1] 2400 2401 2402
Run Code Online (Sandbox Code Playgroud)

......有几个警告

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

akr*_*run 5

我们可以mapply用来获取'起点','端点'的相应元素之间的序列,这可以将'x'矢量子集化.

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

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

x[unlist(mapply(`:`, startpoints, endpoints))]
Run Code Online (Sandbox Code Playgroud)

  • 更好的`unlist(Map(":",起点,端点))`:如果在"endpoints"和`startpoints'之间没有固定差异,就像在示例中那样,你的线路将不起作用.例如,尝试使用`endpoints <-c(3,13,104)`. (2认同)