R 在向量中的不同位置添加一系列元素

R 在向量中的不同位置添加一系列元素,r,R,我的目标是在向量中插入多个元素,每个元素位于不同的位置。这是一个例子,随后是一些不起作用的试验 w <- c( 1,3,2,4,2,3,2,4,5,7,9,3,2,4,2,5,7,4,2 ) u <- c( 3,7,9,12 ) o <- c( 10 , 20 , 30 , 40 ) 是否有办法在每个特定位置一次插入一个元素?我已经看到了几个问题,针对单个元素(一个位置或两个元素要添加到同一位置)的附加基本问题,但是不针对向量中的多个位置添加多个元素 通过计算每个新元素

我的目标是在向量中插入多个元素,每个元素位于不同的位置。这是一个例子,随后是一些不起作用的试验

w  <- c( 1,3,2,4,2,3,2,4,5,7,9,3,2,4,2,5,7,4,2 )
u  <- c( 3,7,9,12 )
o  <- c( 10 , 20 , 30 , 40 )

是否有办法在每个特定位置一次插入一个元素?我已经看到了几个问题,针对单个元素(一个位置或两个元素要添加到同一位置)的附加基本问题,但是不针对向量中的多个位置添加多个元素

通过计算每个新元素和旧元素的位置并一次性添加它们,可以以矢量化的方式(即不重复地
append
ing)执行此操作:

# Positions of old and new elements
add.pos <- u + order(u)
old.pos <- seq_len(length(w) + length(u))
old.pos <- old.pos[!old.pos %in% add.pos]

# Construct new vector in one shot
new.vec <- rep(NA, length(old.pos))
new.vec[add.pos] <- o
new.vec[old.pos] <- w
new.vec
# [1]  1  3  2 10  4  2  3  2 20  4  5 30  7  9  3 40  2  4  2  5  7  4  2
#新旧元素的位置

add.pos这是另一种矢量化方法

New <- rep(w, (1:2)[(1:length(w) %in% u) + 1])
New[u + 1:length(u)] <- o
New
# [1]  1  3  2 10  4  2  3  2 20  4  5 30  7  9  3 40  2  4  2  5  7  4  2

New
idx
x刚刚得到一个解决方案,因为我忘了给问题中的循环分配一个名称。然而,根据许多建议的解决方案,矢量化应该更快。除了代码之外,你不喜欢写很多东西,不是吗you@DavidArenburg,取决于一个问题和我的答案,而不是像你从简单问题中看到的那样,我自己是一个代码员,因为答案是如何以比循环更有效的方式完成这项工作。让我问你,你是否同意将问题转化为如何比循环更有效地运行上述问题。@Barnaby,编辑问题不应该是问题,只要它不会成为一个明显不同的问题。在这种情况下应该没问题。
# Positions of old and new elements
add.pos <- u + order(u)
old.pos <- seq_len(length(w) + length(u))
old.pos <- old.pos[!old.pos %in% add.pos]

# Construct new vector in one shot
new.vec <- rep(NA, length(old.pos))
new.vec[add.pos] <- o
new.vec[old.pos] <- w
new.vec
# [1]  1  3  2 10  4  2  3  2 20  4  5 30  7  9  3 40  2  4  2  5  7  4  2
New <- rep(w, (1:2)[(1:length(w) %in% u) + 1])
New[u + 1:length(u)] <- o
New
# [1]  1  3  2 10  4  2  3  2 20  4  5 30  7  9  3 40  2  4  2  5  7  4  2
idx <- sort(c(1:length(w), u))
replace(w[idx], c(FALSE, diff(idx) == 0), o)
# [1]  1  3  2 10  4  2  3  2 20  4  5 30  7  9  3 40  2  4  2  5  7  4  2
x <- numeric(length(w)+length(o))
ind <- u + order(u) #index to insert o vector (which I shamelessly borrowed from Josilber's answer)
x[ind] <- o
x[-ind] <- w
x
# [1]  1  3  2 10  4  2  3  2 20  4  5 30  7  9  3 40  2  4  2  5  7  4  2