我确信有一个 super 简单的解决方案,但我只是不知道它是什么。
我在 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
...有一些警告
我的起点和终点向量的长度应始终相等,尽管它们的长度可能会随着不同的数据集而变化。
最佳答案
我们可以使用maply
来获取“startpoints”、“endpoints”对应元素之间的序列,这可以对“x”向量进行子集化。
x[mapply(`:`, startpoints, endpoints)]
#[1] 2400 2401 2402 2410 2411 2412 2500 2501 2502
如果序列长度不同,正如@nicola提到的,maply
返回一个list
,所以我们需要unlist
它
x[unlist(mapply(`:`, startpoints, endpoints))]
关于r - 从两个向量创建多个系列的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40265712/