在两个向量之间创建某些值之间的序列

时间:2017-09-10 16:09:27

标签: r vector sequence between

我目前正在尝试在不同长度的不同向量的值之间创建序列。

想象一下,我有以下两个向量a和b:

a<-c(1, 8, 14, 34, 46, 55)
b<-c(3, 6, 12, 13, 18, 42, 49, 50, 57, 200)

我想生成第三个向量,显示a的值与b的下一个最高值之间的序列(此处:1:31,2,3; 8:128,9,10,11,12; 14:1814,15,16,17,18,依此类推,直至55:5755,56,57)。

使用mapply未达到预期效果。

2 个答案:

答案 0 :(得分:6)

我们可以使用findInterval根据'a'的值对'b'进行子集,然后使用Map获取''的元素之间的相应序列(:=) a'和'b'的子集元素

Map(`:`, a, b[findInterval(a, b) + 1])
#[[1]]
#[1] 1 2 3

#[[2]]
#[1]  8  9 10 11 12

#[[3]]
#[1] 14 15 16 17 18

#[[4]]
#[1] 34 35 36 37 38 39 40 41 42

#[[5]]
#[1] 46 47 48 49

#[[6]]
#[1] 55 56 57

答案 1 :(得分:4)

lapply(a, function(x) x:b[b>x][1])
#[[1]]
#[1] 1 2 3

#[[2]]
#[1]  8  9 10 11 12

#[[3]]
#[1] 14 15 16 17 18

#[[4]]
#[1] 34 35 36 37 38 39 40 41 42

#[[5]]
#[1] 46 47 48 49

#[[6]]
#[1] 55 56 57