String 如何交替连接3个字符串
我有3个字符串:String 如何交替连接3个字符串,string,r,concatenation,String,R,Concatenation,我有3个字符串: a<-c("a1","a2","a3") b<-c("b1","b2","b3") c<-c("c1","c2","c3") 以下是我尝试过的: paste(a,b,c,sep='","') 我得到的是: [1]“a1\”、“b1\”、“c1”“a2\”、“b2\”、“c2”“a3\”、“b3\”、“c3” 有办法吗? 谢谢。我想你想要的是: paste('\"', paste(a,b,c,sep='\",\"'), '\"', collapse='\",
a<-c("a1","a2","a3")
b<-c("b1","b2","b3")
c<-c("c1","c2","c3")
以下是我尝试过的:
paste(a,b,c,sep='","')
我得到的是:
[1]“a1\”、“b1\”、“c1”“a2\”、“b2\”、“c2”“a3\”、“b3\”、“c3”
有办法吗?
谢谢。我想你想要的是:
paste('\"', paste(a,b,c,sep='\",\"'), '\"', collapse='\",\"')
您不需要双引号来获取“,”。内部的paste()
执行您尝试的操作,然后外部的paste()
将所有这些连接在一起,以提供您想要的输出。不要担心输出中有“\”——如果用cat
打印出来,就会看到它们消失
这对你有用吗?我想这可能有用:
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"
a您可以使用grep
将它们按您想要的顺序排列
> x <- c(a, b, c)
> x[sapply(1:3, grep, x)]
# [1] "a1" "b1" "c1" "a2" "b2" "c2" "a3" "b3" "c3"
或者可能是粘贴
,但同时将sep
和collapse
参数设置为,“
你也可以使用
c(rbind(a,b,c))
它(rbind
)将三个变量一起放入一个矩阵(行),然后(c()
)将它们转换回向量,利用R按列顺序存储矩阵的事实
这个问题答案的多样性(我认为)源于OP部分的不清晰(不知道这是否是一个理解或沟通的问题…)组合单个字符串(例如,粘贴(“a”,“b”)
导致长度为1的向量:“a b”)
)和字符串向量的组合(c(“a”,“b”)
会产生长度为2的向量:“a”“b”
)我会这样做:
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"
交错将起作用:粘贴(字母[1:3],代表(1:3,每个=3),sep='')
?@BenBolker我的一些答案效率太低了,回想起来简直是愚蠢透顶。但这就是我在这里的原因。我认为OP在长度为9的向量之后(对于给定的示例)。
> paste(a, b, c, sep = ",", collapse = ",")
# [1] "a1,b1,c1,a2,b2,c2,a3,b3,c3"
c(rbind(a,b,c))
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"
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"