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