如何在不迭代的情况下将元素插入向量中的多个位置

时间:2015-10-01 10:12:21

标签: r

如果元素的向量u和向量i中的索引向量x,我们如何在u之后将x的元素插入ix <- c('a','b','c','d','e') u <- c('X','X') i <- c(2,3) # now we want to get c('a','b','X','c','X','d','e') 中的索引相对应的元素,没有迭代?

例如

template <class T>
void fct(T* a, std::remove_reference<T*>::type b) {

我想一步完成(即避免循环),因为每一步都需要创建一个新的向量,实际上这些都是长向量。

我希望有一些索引魔法。

3 个答案:

答案 0 :(得分:6)

我认为只要i不包含重复索引,这就应该有效。

idx <- sort(c(seq_along(x), i))
y <- x[idx]
y[duplicated(idx)] <- u
y
#[1] "a" "b" "X" "c" "X" "d" "e"

修改的 正如@MartinMorgan在评论中所建议的那样,更好的方法是做到这一点 c(x, u)[order(c(seq_along(x), i))]

答案 1 :(得分:1)

与此同时,我想出了一些可以完成工作的东西(假设i中的索引是唯一的):

xn <- rep(NA,length(x))
xn[i] <- u
y <- c(rbind(x,xn))
y <- y[!is.na(y)] 

答案 2 :(得分:1)

这是我的功能

# vec->source vector, val->values to insert, at->positions to insert

func_insert_vector_at <- function(vec, val, at){
    out=numeric(length(vec)+length(val))
    out[at]=NA
    out[!is.na(out)]=vec
    out[at]=val
    return(out)
}