data.frame和vector的组合

data.frame和vector的组合,r,vector,dataframe,combinations,R,Vector,Dataframe,Combinations,我的问题类似于:我需要创建data.frame和vector之间的所有组合,但我需要一个多列data.frames的解决方案,这样我可以减少更大问题的计算时间 我正在寻找的示例: 我需要创建三次1:3的组合,但最后,我只需要总sum小于5的组合 一种方法是简单地使用expand.grid,得到27个组合,然后只有4个组合符合我的求和规则 > x = 1:3 > b = expand.grid(x,x,x) > rows = apply(b,1,sum) > sum(ro

我的问题类似于:我需要创建
data.frame
vector
之间的所有组合,但我需要一个多列data.frames的解决方案,这样我可以减少更大问题的计算时间

我正在寻找的示例:

我需要创建三次
1:3
的组合,但最后,我只需要总
sum
小于5的组合

一种方法是简单地使用
expand.grid
,得到27个组合,然后只有4个组合符合我的求和规则

> x = 1:3
> b = expand.grid(x,x,x)

> rows = apply(b,1,sum)
> sum(rows < 5)
[1] 4

# Which rows obey the rule
> b[rows<5,]
   Var1 Var2 Var3
1     1    1    1
2     2    1    1
4     1    2    1
10    1    1    2
>x=1:3
>b=展开网格(x,x,x)
>行=应用(b,1,和)
>总和(行数<5)
[1] 4
#哪些行遵守规则
>b[行x=1:3
>a=展开网格(x,x)
>行=应用(a,1,总和)
>总和(行数<5)
[1] 6
#哪些行遵守规则

>a[行您可以
在行号和
cbind上一起展开.grid

expand.grid.XY <- function(X,Y) {
  X<-as.data.frame(X);
  Y<-as.data.frame(Y);
  idx<-expand.grid(1:nrow(X),1:nrow(Y));
  cbind(X[idx[,1],,drop=FALSE],Y[idx[,2],,drop=FALSE])
}

expand.grid.XY谢谢!使用data.frame的行号的想法非常聪明。我将看一看
foreach
。我真正的问题与上面描述的基本相同,不同之处在于向量的大小以及我需要组合它的次数。我正在运行一个模拟,需要一组参数,求和后,可以不能超过某个阈值。
expand.grid.XY <- function(X,Y) {
  X<-as.data.frame(X);
  Y<-as.data.frame(Y);
  idx<-expand.grid(1:nrow(X),1:nrow(Y));
  cbind(X[idx[,1],,drop=FALSE],Y[idx[,2],,drop=FALSE])
}
expand.grid.XY(a[rows<5,],x)
Var1 Var2 Y 1 1 1 1 2 2 1 1 3 3 1 1 4 1 2 1 5 2 2 1 7 1 3 1 1.1 1 1 2 2.1 2 1 2 3.1 3 1 2 4.1 1 2 2 5.1 2 2 2 7.1 1 3 2 1.2 1 1 3 2.2 2 1 3 3.2 3 1 3 4.2 1 2 3 5.2 2 2 3 7.2 1 3 3