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

Это будет намного проще, если вы используете 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

Не понятно, почему вы не смогли заменить с помощью 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

+0

@Thomas На примере, который вы показали, я могу его заменить. Может быть, вы попробовали 'paste0' вместо' paste' – akrun

2

Вместо do.call сделать:

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

+1, я думаю, вам не нужно 'data.frame' здесь, или, возможно,' data.frame' вне 'apply' будет иметь значение в формате вывода , – akrun

Смежные вопросы