如何操纵组合输出?

时间:2014-10-03 07:38:48

标签: r combinations

我有一个向量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"

现在我想放一个&#34; +&#34;在输出看起来像这样的元素之间:

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替换元素之间的空格,但这不起作用,因为没有空格。任何评论都表示赞赏,谢谢。

3 个答案:

答案 0 :(得分:4)

如果您在FUN中使用combn参数,这会更容易。 collapse中的paste参数非常适合插入+符号。

对于数据框结果,您可以执行

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 :(得分:2)

而不是do.call做:

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

答案 2 :(得分: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"