查找两个向量的所有组合作为新向量

时间:2018-09-05 14:15:53

标签: r

我有两个向量:

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

一个选项是

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))))

答案 1 :(得分:0)

这是你的追求吗?

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,它给出要排序的列的索引向量。