2014-10-03 58 views
0

我有有六个元素的向量vars如何操作组合输出?

vars <- c("ac", "fv", "vs", "v2", "ms", "yv") 

要合并的元素随机我用combn

a <- do.call(paste, c(data.frame(t(combn(vars, 5))))) 

输出看起来像这样

a 
[1] "ac fv vs v2 ms" 
[2] "ac fv vs v2 yv" 
[3] "ac fv vs ms yv" 
[4] "ac vs v2 ms yv" 
[5] "fv vs v2 ms yv" 

现在我想在输出看起来像这样的元素之间加上一个“+”:

a 
[1] "ac+fv+vs+v2+ms" 
[2] "ac+fv+vs+v2+yv" 
[3] "ac+fv+vs+ms+yv" 
[4] "ac+vs+v2+ms+yv" 
[5] "fv+vs+v2+ms+yv" 

我试图用gsub替换元素之间的空格,但这不起作用,因为没有空格。任何意见表示赞赏,谢谢。

回答

4

这会容易得多。 paste中的collapse参数非常适合插入+标志。

对于数据帧的结果,你可以做

data.frame(a = combn(vars, 5, FUN = paste, collapse = "+")) 
#    a 
# 1 ac+fv+vs+v2+ms 
# 2 ac+fv+vs+v2+yv 
# 3 ac+fv+vs+ms+yv 
# 4 ac+fv+v2+ms+yv 
# 5 ac+vs+v2+ms+yv 
# 6 fv+vs+v2+ms+yv 
1

目前尚不清楚为什么你无法使用gsub

gsub(" ", "+", a) 
#[1] "ac+fv+vs+v2+ms" "ac+fv+vs+v2+yv" "ac+fv+vs+ms+yv" "ac+fv+v2+ms+yv" 
#[5] "ac+vs+v2+ms+yv" "fv+vs+v2+ms+yv" 
+0

由于存在这些元件之间没有空格,我猜。 – Thomas 2014-10-03 07:58:19

+0

@Thomas根据你展示的例子,我可以取代它。可能是你尝试'paste0'而不是'paste' – akrun 2014-10-03 07:59:55

2

而不是do.call做替换:如果您在combn使用FUN参数

apply(data.frame(t(combn(vars, 5))), 1, paste, collapse="+") 
+0

+1,我猜你不需要'data.frame'或者'apply'之外的'data.frame'会使输出格式有所不同。 – akrun 2014-10-03 07:52:09