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

Mus*_*ful 4 r

给定一个向量u元素和矢量i指数到载体x,我们如何可以插入的元素ux对应于指数的元素后i,无需重复?

例如

x <- 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')
Run Code Online (Sandbox Code Playgroud)

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

我希望有一些索引魔法.

kon*_*vas 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"
Run Code Online (Sandbox Code Playgroud)

编辑 正如@MartinMorgan在评论中建议的那样,更好的方法是这样做 c(x, u)[order(c(seq_along(x), i))].

  • @MartinMorgan好一个,你的方式好多了.也许发布它作为一个应该被接受的答案 (2认同)