【发布时间】:2019-04-02 20:19:49
【问题描述】:
我有七个数字。我想生成所有长度为 7 的向量:
- 从 7 个数字的池中抽取两个第一个元素。
- 从剩下的 5 个数字中抽取两个下一个元素。
- 从剩下的 3 个数字中抽取三个最终元素。
这种方式可以用向量 c(2,2,3) 来描述。
For example:
sample <- c(8.93,9.11,9.12,9.05,8.87,8.95,9.02)
structure <- c(2,2,3)
我知道有 7C2*5C2*3C3 = 210 个这样的向量。为了更清楚,我不需要在每组元素内进行排列,例如,两个向量 c(8.93,9.11,9.12,9.05,8.87,8.95,9.02) 和 c(9.11,8.93,9.12,9.05,8.87,8.95,9.02) 对我来说是相同的,我只需要其中一个出现在 210 个向量的列表中。
这是我使用 for 循环、combn 和 setdiff 所做的。但是,我想在代码中使用向量structure 并使其更灵活,例如c(2,5) 而不是c(2,2,3)。有没有更简洁的解决方案来概括我的问题,例如 apply 函数系列?
df<-data.frame()
sample <- c(8.93,9.11,9.12,9.05,8.87,8.95,9.02)
combn(sample,2) -> com1
for (i in 1:ncol(com1)){
com1[,i]
setdiff(sample,com1[,i]) -> com2
combn(com2,2) -> com3
for (j in 1:ncol(com3)){
setdiff(com2,com3[,j]) -> com4
c(com1[,i],com3[,j],com4) -> de
df <- rbind(df,de)
}
}
df
【问题讨论】:
-
你目前有什么代码?
-
@HectorHaffenden 谢谢,我只是用我所做的来更新我的问题。
标签: r combinations