Найти все комбинации двух векторов как новый вектор - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть два вектора:

x <- c('Q1', 'Q2', 'Q3')

y <- c('Yes', 'No')

Основываясь на этих векторах, я хотел бы создать фрейм данных, где каждая строка была бы вектором, где вопросы (Q1, Q2, Q3) находятся в нечетных позициях в порядке их расположения в векторе x, и ответы (Да, Нет ) находятся на четных позициях, и мне нужны все возможные комбинации:

'Q1', 'Yes', 'Q2', 'Yes', 'Q3', 'Yes'
'Q1', 'Yes', 'Q2', 'Yes', 'Q3', 'No'
'Q1', 'Yes', 'Q2', 'No', 'Q3',  'Yes'

и так далее ...

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Это то, что вы ищете?

ans <- expand.grid(rep(list(c("Yes", "No")), 3))
qst <- as.data.frame(sapply(x, function(i) rep(i, nrow(ans))))

ret <- cbind(qst, ans)
ret[as.numeric(sapply(1:length(x), function(i) c(i, i + length(x))))]
#  Q1 Var1 Q2 Var2 Q3 Var3
#1 Q1  Yes Q2  Yes Q3  Yes
#2 Q1   No Q2  Yes Q3  Yes
#3 Q1  Yes Q2   No Q3  Yes
#4 Q1   No Q2   No Q3  Yes
#5 Q1  Yes Q2  Yes Q3   No
#6 Q1   No Q2  Yes Q3   No
#7 Q1  Yes Q2   No Q3   No
#8 Q1   No Q2   No Q3   No

Последние две строки делают следующее:

  1. Привязка столбцов к вопросам и ответам.
  2. Переставьте столбцы так, чтобы вопросы и ответы чередовались. as.numeric(sapply(1:length(x), function(i) c(i, i + length(x)))) возвращает 1 4 2 5 3 6, что дает вектор индексов для упорядоченных столбцов.
0 голосов
/ 05 сентября 2018

Один вариант будет

expand.grid(combn(x, 2, FUN = list), y)

Выше создается столбец list вместе с обычным столбцом. Если нам нужно matrix

do.call(rbind, do.call(Map, c(f = c, expand.grid(combn(x, 2, 
           FUN = list), y, stringsAsFactors = FALSE))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...