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

标签 r

我确信有一个 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/

相关文章:

R并行共享内存对象(Windows)

r - 如何计算不同群体的共同值(value)?

r - 在数据框中的多列上使用shapiro.test

r - 通过操作因子从单个向量创建一个新向量

r - 将 "loadings"对象转换为数据帧 (R)

r - 在 R 中分析函数 'library'

r - 为什么这个 xts 频率总是 1?

报告变量的第一个和最后一个非缺失观察

r - 使用 rCharts 包创建气泡图(Highcharts)

r - "zero-length arrow"有多小?