Объяснение проблемы
Учитывая два вектора переменной длины и без дубликатов между векторами или внутри них, как можно эффективно комбинировать векторы в порядке возрастания и чередования?
Вот пример:
a <- c(98, 101, 104, 136, 154, 193)
b <- c(31, 37, 41, 44, 48, 55, 80, 118, 179)
Ожидаемый вывод
c(31, 98, 118, 136, 179, 193)
# b, a, b, a, b, a
Вы можете видеть, что мы начинаем с 31 от a
, наименьшего между векторами.
Далее следует 98 из b
. Затем из a
следующее число, большее 98, равно 118. И так, в результате получается:
A = 98, 136, 193
B = 31, 118, 179
Моя попытка:
x <- c(min(a,b))
lastwas <- startedwithA <- ifelse(x %in% a, 1, 2)
for(i in 1:(length(a)+length(b))){
if(lastwas == 2){
x <- c(x, a[which(a > x[i])[1]])
lastwas <- 1
} else if(lastwas == 1){
x <- c(x, b[which(b > x[i])[1]])
lastwas <- 2
}
}
(x <- x[!is.na(x)])
# [1] 31 98 118 136 179 193
if(startedwithA == 1){
evenodd <- c(T,F)
} else {
evenodd <- c(F,T)
}
(A = x[evenodd])
# [1] 98 136 193
(B = x[!evenodd])
# [1] 31 118 179
Есть ли лучший способ решить эту проблему?