2016-05-19 2 views
1

Предположим, что у нас есть гипотетическое полное расписание потенциальных результатов эксперимента.перестановки выбора одного элемента из двух столбцов матрицы

Y0<-c(10,15,20,20,10,15,15) 
Y1<-c(15,15,30,15,20,15,30) 
budgets<-matrix(data=c(Y0,Y1),nrow=7,ncol=2) 

Я хотел бы перечислить все способы выбора двух элементов из Y1 и остальных 5 из Y0. В идеале это будет выглядеть как массив из 21 списка, каждый из которых имеет два элемента с меткой Y0 и два элемента, помеченные как Y1.

Редактировать: Это согласованные пары, поэтому выбор y0[1] удаляет y1[1] с рассмотрения.

Заранее благодарен! Я думаю, что есть много способов приблизиться к этому (sapply?), Но будет благодарна за помощь в деталях.

+0

как о 'combn (7,2, функция (v) бюджет [cbind (1: 7,1L + (1: 7% в% об))], упростить = F)' –

ответ

1

Вот уже метод, то, вероятно, является более компактным решением там:

# get within group combinations as matrix 
grp0 <-t(combn(Y0, 5)) 
grp1 <-t(combn(Y1, 2)) 

# get all possible combos of these rows 
grpCombos <- expand.grid(1:nrow(grp1), 1:nrow(grp2)) 

# get all combinations as a matrix 
allGroups <- cbind(grp0[grpCombos[,1],], grp1[grpCombos[,2],]) 
0

Для того, чтобы получить все комбинации из 2-х элементов из Y1 и и оставшиеся 5 элементов из Y0 и выбрать только один элемент из каждое положение, попробуйте следующий код:

cb <- as.data.frame(combn(1:7, 2)) 
sapply(cb, FUN = function(x) c(Y1[x], Y0[-x])) 

предыдущие: Если вы хотите, чтобы все комбинации выбрать 2 из 7 в Y1 и выбрать 5 из 7 в Y0, общее сочетание число будет 21 * 21.

+0

Hi Jianfeng, я извиняться , Я был неясно. Вы правы, что, по-моему, есть 441 комбо, но это парные пары, поэтому выбор 'Y0 [1]' означает, что 'Y1 [1]' удаляется из рассмотрения. –

+0

@lmo понял ваш вопрос таким же образом. После исправления это намного яснее. – Jianfeng

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