如果我有一个向量c(1,2,3,5,7,9,10,12)……和另一个向量c(3,7,10),我应该如何产生以下结果:
[[1]]
1,2,3
[[2]]
5,7
[[3]]
9,10
[[4]]
12
注意到每个列表元素的最后一个数字(除了最后一个)是3、7和10。或者可以说是“断点”。我相信有一个简单的R函数,但我可能不知道或者遗忘了。
如果我有一个向量c(1,2,3,5,7,9,10,12)……和另一个向量c(3,7,10),我应该如何产生以下结果:
[[1]]
1,2,3
[[2]]
5,7
[[3]]
9,10
[[4]]
12
注意到每个列表元素的最后一个数字(除了最后一个)是3、7和10。或者可以说是“断点”。我相信有一个简单的R函数,但我可能不知道或者遗忘了。
使用cut
和split
的方式如下:
split(x, cut(x, c(-Inf, y, Inf)))
#$`(-Inf,3]`
#[1] 1 2 3
#
#$`(3,7]`
#[1] 5 7
#
#$`(7,10]`
#[1] 9 10
#
#$`(10, Inf]`
#[1] 12
能够实现
split(x, cut(x, unique(c(y, range(x)))))
## $`[1,3]`
## [1] 1 2 3
## $`(3,7]`
## [1] 5 7
## $`(7,10]`
## [1] 9 10
## $`(10,12]`
## [1] 12
findInterval
代替 cut
。split(x, findInterval(x, y + 1))
# $`0`
# [1] 1 2 3
#
# $`1`
# [1] 5 7
#
# $`2`
# [1] 9 10
#
# $`3`
# [1] 12
superCoool <- function(x , y) split(x, cut(x, c(-Inf, y, Inf)))
:) - talat