how to alternatively concatenate 3 strings

I have 3 strings:

a<-c("a1","a2","a3")
b<-c("b1","b2","b3")
c<-c("c1","c2","c3")

How can I get the following output:

"a1","b1","c1","a2","b2","c2","a3","b3","c3"

Here is what I tried:

paste(a,b,c,sep='","')

And what I got:

[1] "a1","b1","c1" "a2","b2","c2" "a3","b3","c3"

Is there a way to do it? Thank you.


You could also use

c(rbind(a,b,c))

which ( rbind ) puts the three variables together into a matrix (row-wise), and then ( c() ) converts them back into a vector, taking advantage of the fact that R stores matrices in column-wise order.

Some of the diversity of the answers to this question stems (I think) from a lack of clarity on the OP's part (don't know whether this is an issue of understanding or communication ...) between combining individual character strings (eg paste("a","b") results in a vector of length 1: "ab") ) and combining vectors of character strings ( c("a","b") results in a vector of length 2: "a" "b" )


I'd do it this way:

interleave <- function(...) {
    ll <- list(...)
    unlist(ll)[order(unlist(lapply(ll, seq_along)))]
}
interleave(a,b,c)
# [1] "a1" "b1" "c1" "a2" "b2" "c2" "a3" "b3" "c3"

The advantage is that you don't have to depend on the vectors having the same size. For example:

a <- paste("a", 1:3, sep="")
b <- paste("b", 1:4, sep="")
c <- paste("c", 1:5, sep="")

interleave(a,b,c)
# [1] "a1" "b1" "c1" "a2" "b2" "c2" "a3" "b3" "c3" "b4" "c4" "c5"

This is closely related to this answer.


我认为这可能工作:

a<-c("a1","a2","a3")
b<-c("b1","b2","b3")
c<-c("c1","c2","c3")

c(sapply(seq(1,3), function(x) c(a[x],b[x],c[x])))

[1] "a1" "b1" "c1" "a2" "b2" "c2" "a3" "b3" "c3"
链接地址: http://www.djcxy.com/p/24848.html

上一篇: 字符串连接:concat()vs“+”运算符

下一篇: 如何交替连接3个字符串