R:用多个值替换向量的值

Gal*_*ang 2 replace r insert vector

比方说,我有一个a带有length(a) = l和的向量l >= 1

该元素"x"在 中至少出现一次a,但我们不知道确切的位置。

我想替换每个"x"a与价值观c(1,2,3)

例如:a = ("y","x","z"),那么我希望替换后的结果是a = ("y",1,2,3,"z")

我想这样做:

l <- length(a)
pos.x <- which(a == "x")

if(l == 1L & pos.x == 1L) {
  a <- c(1,2,3)
} else if (l > 1L & pos.x == 1) {
  a <- c(1,2,3,a[-1])
} else if (l > 1L & pos.x == l) {
  a <- c(a[-l],1,2,3)
} else if (l >= 3 & pos.x != 1 & pos.x != l) {
  a <- c(a[1:(pos.x - 1)],1,2,3,a[(pos.x + 1):l])
}
Run Code Online (Sandbox Code Playgroud)

虽然这段代码确实有效,但我的问题是是否有一种更“优雅”的方法来解决这个问题,它需要更少的处理能力,并且可以替代多个"x".

谢谢!

Shr*_*ree 5

这是一个基于 R 的简单矢量化解决方案 -

a <- c("y","x","z","y","x","z") # vector to search
b <- 1:3 # replacement values

a <- rep(a, 1 + (length(b) - 1)*(a == "x")) # repeat only "x" length(b) times

a[a == "x"] <- b # replace "x" with replacement values i.e. b

[1] "y" "1" "2" "3" "z" "y" "1" "2" "3" "z"
Run Code Online (Sandbox Code Playgroud)