将字符向量的每个元素与第二个向量r的所有元素连接起来

时间:2018-06-22 20:02:42

标签: r vector character concatenation

我试图以产生以下输出的方式来连接两个字符向量

aggmodes<-c("17x8","17x7x8","17x28x8")
listdata<-c("Motion.Age","res.Context.Only")

输出应该是这样

"Motion.Age,17x8"  
"Motion.Age,17x7x8"
"Motion.Age,17x28x8"
"res.Context.Only,17x8"
"res.Context.Only,17x7x8"
"res.Context.Only,17x28x8"

我写了以下代码:

c<-as.vector(sapply(1:length(listdata), function(i){
sapply(1:length(aggmodes),function(j){paste(aggmodes,listdata)})
}))

但是它给了我一个10维向量。很抱歉,如果重复的话,但是我找不到解决问题的正确答案

2 个答案:

答案 0 :(得分:1)

c(sapply(listdata,paste,aggmodes,sep=","))
# [1] "Motion.Age,17x8"          "Motion.Age,17x7x8"        "Motion.Age,17x28x8"      
# [4] "res.Context.Only,17x8"    "res.Context.Only,17x7x8"  "res.Context.Only,17x28x

我们将listdata的每个元素粘贴到所有aggmodes上,然后将其全部解包。

您的代码不是最优的,因为您没有利用paste是矢量化的事实,但是可以稍作修改即可工作:

as.vector(sapply(1:length(listdata), function(i){
  sapply(1:length(aggmodes),function(j){paste(aggmodes[j],listdata[i])})
}))

答案 1 :(得分:0)

as.character(outer(listdata, aggmodes, paste, sep = ","))

outer接受三个参数:xyFUN。它将FUN应用于xy的所有元素-在这种情况下,将它们粘贴在一起。由于outer返回矩阵,因此将其包装在as.character中以返回向量!