#r #sequence
#r #последовательность
Вопрос:
Я создаю много карт, где меняются разрывы. Я хочу одинаковые интервалы, но наибольшее число изменяется от карты к карте. Я мог бы пойти с несколькими if
, но должен быть лучший способ?
maxvalues <- c(453, 25)
breaks <- c(0,1,2,5,10,20,50,100,200)
Из этого я хотел бы получить
0,1,2,5,10,20,50,100,200, 453
0,1,2,5,10,25
Есть идеи?
Ответ №1:
Мы можем перебирать «максимальные значения», получать элементы в «разрывах», которые меньше его, объединять с «x» и unlist
unlist(lapply(maxvalues,function(x) c(breaks[breaks< x], x)))
#[1] 0 1 2 5 10 20 50 100 200 453 0 1 2 5 10 20 25
Комментарии:
1. Большое спасибо, работает как шарм. Все еще пытаюсь разобраться во всех приложениях.
2. @JeppeOlsen As
maxvalues
— вектор. Используяlapply
, он перебирает каждый из элементов в этом векторе в alist
, создает логическое выражение (breaks < x
), подмножествоbreaks
(breaks[breaks < x]
), объединяет с элементом (c(breaks[...., x)
) иunlist
с вектором.
Ответ №2:
Учитывая, что breaks
это отсортировано, я думаю findInterval
, что это хорошо подходит для вашей проблемы, поскольку с помощью которой вы можете найти наибольшее число, меньшее, чем заданное вами максимальное значение. Вот как поступить:
sapply(maxvalues, function(x) c(breaks[1:findInterval(x, breaks)], x))
#[[1]]
# [1] 0 1 2 5 10 20 50 100 200 453
#[[2]]
#[1] 0 1 2 5 10 20 25