Найти значения, которые находятся между списком чисел - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть два списка чисел, как показано ниже.

x <- c(1, 5, 10, 17, 21, 30)
y <- c(2, 7, 19)

В моем наборе данных x делит от 1 до 30 на разные сегменты (от 1-5, 5-10, 10-17, 17-21, 21-30). Можно ли сопоставить эти сегменты с числами в y? (В этом случае я бы хотел получить c(1,5,17) в качестве выхода, потому что 2 - от 1 до 5, 7 - от 5 до 10, а 19 - от 17 до 21.)

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

?findInterval на помощь:

x[findInterval(y,x)]
#[1]  1  5 17
0 голосов
/ 04 сентября 2018

Использование cut - это еще один вариант

cut(y, breaks = x, labels = x[-length(x)])
#[1] 1  5  17

Можно также сделать с labels = FALSE

x[cut(y, breaks = x, labels = FALSE)]
#[1]  1  5 17
0 голосов
/ 04 сентября 2018

Вы можете сделать это с помощью sapply и простой функции

sapply(y, function(a) x[max(which(x<a))])
[1]  1  5 17
...