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"
.
谢谢!
这是一个基于 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)