2014-10-03 60 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