【发布时间】:2019-04-28 02:41:05
【问题描述】:
问题说明
给定两个可变长度的向量,并且向量之间或向量内没有重复,如何有效地以升序和交替顺序组合向量?
这是一个例子:
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
您可以看到我们从a 中的 31 开始,这是向量中最小的。
接下来是来自b 的 98。然后从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
有没有更好的方法来解决这个问题?
【问题讨论】:
-
您的预期输出究竟是什么样的?
标签: r