Я хотел бы сгенерировать все комбинации двух векторов, учитывая два ограничения: из первого вектора никогда не может быть больше трех символов, и всегда должно быть не менее одного символа от второго вектора. Я также хотел бы изменить окончательное количество символов в комбинации.R - генерировать все комбинации из 2 векторов заданных ограничений
Например, вот два вектора:
vec1=c("A","B","C","D")
vec2=c("W","X","Y","Z")
Скажем, я хотел 3-х символов в комбинации. Возможными приемлемыми перестановками могут быть: "A" "B" "X"
или "A" "Y" "Z"
. Неприемлемой перестановкой будет: "A" "B" "C"
, поскольку не существует хотя бы одного символа от vec2
.
Теперь скажите, что мне понадобилось 5 символов в комбинации. Возможными приемлемыми перестановками могут быть: "A" "C" "Z" "Y"
или "A" "Y" "Z" "X"
. Неприемлемой перестановкой будет: "A" "C" "D" "B" "X"
, так как есть 3 символа от vec2
.
Я полагаю, что я мог бы использовать expand.grid
для создания всех комбинаций, а затем как-то подмножества, но должен быть более простой способ. Заранее спасибо!
Хм, интересное решение! Мне просто интересно ... если записи имеют> 1 символ (поэтому вместо 'vec = letters [1: 3]', 'vec = month.имя [1: 4] ') как выбрать комбинации с 3 записями (очевидно, nchar не будет работать) – jslefche
@jslefche: Я вижу две возможности: либо идти по спискам, либо сначала придерживаться букв (и их оскорблять) как индикаторы уровня фактора), и как только у вас есть ваши комбинации, конвертируйте буквы в месяцы – cbeleites
@beleites: я использовал 'strtrim' для ограничения количества символов в каждом векторе и использовал их для создания комбинаций – jslefche