我有两个向量:
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'
以此类推...
我该怎么做?
答案 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
最后两行执行以下操作:
as.numeric(sapply(1:length(x), function(i) c(i, i + length(x))))
返回1 4 2 5 3 6
,它给出要排序的列的索引向量。