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
下一篇: 如何交替连接3个字符串