我有3个字符串:
a<-c("a1","a2","a3")
b<-c("b1","b2","b3")
c<-c("c1","c2","c3")
如何获得以下输出:
"a1","b1","c1","a2","b2","c2","a3","b3","c3"
以下是我的尝试:
paste(a,b,c,sep='","')
我得到了什么:
[1] "a1\",\"b1\",\"c1" "a2\",\"b2\",\"c2" "a3\",\"b3\",\"c3"
有办法吗? 谢谢。
答案 0 :(得分:7)
您也可以使用
c(rbind(a,b,c))
其中(rbind
)将三个变量放在一个矩阵中(逐行),然后(c()
)将它们转换回一个向量,利用R存储矩阵的事实按列顺序。
这个问题的答案的一些多样性源于(我认为)OP的部分(不知道这是一个理解或沟通的问题......)在组合单个字符串之间的不明确性(例如paste("a","b")
生成长度为1的向量:"a b")
)并组合字符串的向量(c("a","b")
会生成长度为2的向量:{{ 1}})
答案 1 :(得分:3)
我这样做:
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"
这与this answer密切相关。
答案 2 :(得分:1)
我认为这可行:
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"
答案 3 :(得分:1)
您可以使用grep
将它们按照您想要的顺序放置
> x <- c(a, b, c)
> x[sapply(1:3, grep, x)]
# [1] "a1" "b1" "c1" "a2" "b2" "c2" "a3" "b3" "c3"
或unlist(strsplit(paste(a, b, c), " "))
也可以。
虽然,您似乎可能正在尝试在其中粘贴逗号。如果您正在拍摄,请尝试使用cat
sep
参数设置为","
> cat(x[sapply(1:3, grep, x)], sep = ",")
# a1,b1,c1,a2,b2,c2,a3,b3,c3
或者paste
,但sep
和collapse
参数设置为","
> paste(a, b, c, sep = ",", collapse = ",")
# [1] "a1,b1,c1,a2,b2,c2,a3,b3,c3"
答案 4 :(得分:0)
我认为你想要的是:
paste('\"', paste(a,b,c,sep='\",\"'), '\"', collapse='\",\"')
你不需要双引号来获得&#34;,#34;。内部paste()
执行您尝试的操作,然后外部paste()
将这些连接在一起,为您提供所需的输出。不要担心输出有&#34; \&#34;在其中 - 如果您使用cat
打印出来,您将会看到它们消失。
这对你有用吗?