2014-02-11 2 views
1

Скажем, у меня есть вектор c(1,2,3,4,5,6,7,8,9,10), который я хочу разбить на подмножества, ограниченные другим вектором c(4, 6, 11).Разделить вектор чисел на ограниченные подмножества

Я хочу, чтобы результат был трех векторов [1,2,3], [4,5] и [6,7,8,9,10]. (Или [1,2,3,4] и т. Д.) Я не придирчивый.)

Есть ли простой способ сделать это в R, не прибегая к какой-то забаве с factor или apply?

ответ

3

Вы можете использовать findInterval и split:

> x <- c(1,2,3,4,5,6,7,8,9,10) 
> split(x, findInterval(x, c(4, 6, 11))) 
$`0` 
[1] 1 2 3 

$`1` 
[1] 4 5 

$`2` 
[1] 6 7 8 9 10 

Я не знаю, если это подпадает под «прибегая к некоторым funkiness» или нет, хотя.

+0

Спасибо, это в значительной степени то, что я искал. Я разместил свое решение ниже, но, похоже, вы были быстрее. – user1518829

0

Я нашел способ сделать это:

> x <- c(1:10) 
> bounds <- c(3, 7, 12) 
> f <- cut(x, c(0, bounds)) 
> split(x, f) 
$`(0,3]` 
[1] 1 2 3 

$`(3,7]` 
[1] 4 5 6 7 

$`(7,12]` 
[1] 8 9 10 

но Ананда намного чище.

Однако, я думаю, это позволяет вам указать right=false в cut, чтобы изменить поведение.

Смежные вопросы