在两个向量的某些值之间创建序列
Create sequence between certain values across two vectors
我目前正在尝试在长度不同的不同向量的值之间创建序列。
假设我有以下两个向量 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:3
为 1,2,3
;8:12
作为 8,9,10,11,12
;14:18
作为 14,15,16,17,18
等等,直到最后 55:57
作为 55,56,57
)。
使用 mapply
没有产生预期的结果。
我们可以使用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
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
我目前正在尝试在长度不同的不同向量的值之间创建序列。
假设我有以下两个向量 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:3
为 1,2,3
;8:12
作为 8,9,10,11,12
;14:18
作为 14,15,16,17,18
等等,直到最后 55:57
作为 55,56,57
)。
使用 mapply
没有产生预期的结果。
我们可以使用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
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