如何将字符串向量与字符串交错
How to interleave vector of strings with a string
我有以下向量示例:
v1 <- c("AA", "BB")
v2 <- c("AA", "BB", "CCC")
请注意,每个向量的长度可以变化。
我想做的是用一个字符串交错每个向量:
linker <- "xxx"
结果是:
c("AA", "xxx", "BB")
c("AA","xxx", "BB", "xxx", "CCC")
我怎样才能做到这一点?
你可以在这里使用 rbind
技巧:
v1 <- c("AA", "BB")
v2 <- c("AA", "BB", "CCC")
linker <- "xxx"
head(c(rbind(v2, linker)), -1)
[1] "AA" "xxx" "BB" "xxx" "CCC"
这里有一个可能的答案:
v1 <- c("AA", "BB")
v2 <- c("AA", "BB", "CCC")
linker <- "xxx"
interleave <- function(v,l){
result <- c()
for(i in 1:length(v)){
if(i!=1){
result <- c(result,l,v[i])
}else{
result <- c(result,v[i])
}
}
return(result)
}
interleave(v1,linker)
interleave(v2,linker)
结果:
> interleave(v1,linker)
[1] "AA" "xxx" "BB"
>
> interleave(v2,linker)
[1] "AA" "xxx" "BB" "xxx" "CCC"
我们可以使用 append
,然后 head
删除尾随链接器:
append_linker <- function(vector, linker){
lapply(vector, \(x) append(x, linker)) |>
unlist() |>
head(-1)
}
append_linker(v1, linker)
[1] "AA" "xxx" "BB"
append_linker(v2, linker)
[1] "AA" "xxx" "BB" "xxx" "CCC"
mapply
和 c
的创造性应用:
v1 <- c("AA", "BB")
v2 <- c("AA", "BB", "CCC")
linker <- 'xxx'
c(mapply(c, linker, v1))[-1]
[1] "AA" "xxx" "BB"
c(mapply(c, linker, v2))[-1]
[1] "AA" "xxx" "BB" "xxx" "CCC"
我们可以像下面那样尝试 strsplit
+ paste0
> strsplit(paste0(v2, collapse = sprintf(" %s ", linker)), " ")[[1]]
[1] "AA" "xxx" "BB" "xxx" "CCC"
我有以下向量示例:
v1 <- c("AA", "BB")
v2 <- c("AA", "BB", "CCC")
请注意,每个向量的长度可以变化。
我想做的是用一个字符串交错每个向量:
linker <- "xxx"
结果是:
c("AA", "xxx", "BB")
c("AA","xxx", "BB", "xxx", "CCC")
我怎样才能做到这一点?
你可以在这里使用 rbind
技巧:
v1 <- c("AA", "BB")
v2 <- c("AA", "BB", "CCC")
linker <- "xxx"
head(c(rbind(v2, linker)), -1)
[1] "AA" "xxx" "BB" "xxx" "CCC"
这里有一个可能的答案:
v1 <- c("AA", "BB")
v2 <- c("AA", "BB", "CCC")
linker <- "xxx"
interleave <- function(v,l){
result <- c()
for(i in 1:length(v)){
if(i!=1){
result <- c(result,l,v[i])
}else{
result <- c(result,v[i])
}
}
return(result)
}
interleave(v1,linker)
interleave(v2,linker)
结果:
> interleave(v1,linker)
[1] "AA" "xxx" "BB"
>
> interleave(v2,linker)
[1] "AA" "xxx" "BB" "xxx" "CCC"
我们可以使用 append
,然后 head
删除尾随链接器:
append_linker <- function(vector, linker){
lapply(vector, \(x) append(x, linker)) |>
unlist() |>
head(-1)
}
append_linker(v1, linker)
[1] "AA" "xxx" "BB"
append_linker(v2, linker)
[1] "AA" "xxx" "BB" "xxx" "CCC"
mapply
和 c
的创造性应用:
v1 <- c("AA", "BB")
v2 <- c("AA", "BB", "CCC")
linker <- 'xxx'
c(mapply(c, linker, v1))[-1]
[1] "AA" "xxx" "BB"
c(mapply(c, linker, v2))[-1]
[1] "AA" "xxx" "BB" "xxx" "CCC"
我们可以像下面那样尝试 strsplit
+ paste0
> strsplit(paste0(v2, collapse = sprintf(" %s ", linker)), " ")[[1]]
[1] "AA" "xxx" "BB" "xxx" "CCC"