尝试创建一个包含N个分类变量的所有可能组合的数据框架



我正在对5个不同的分类变量进行5层回归。我想建立一个数据框架其中每一行都是这些变量的不同组合。我知道这在R中是可能的,但我遇到了寻找语法的问题。

我知道你能做到:

unique(df[c('x','y','z')]) 

查找跨列的唯一值组合,但我不认为您可以使用我想要的语法。

理想情况下我希望DF看起来像:

行1:x1, y1, z1

行2:x1, y1, z2

也试着复制:

> x1<-rep(c(1,2,3,4,5),times=4)
> x2<-rep(c("A","B","C","D"),each=5)
> x3<-letters[1:20]
> x4<-rep(c(5,10,15,20),times=c(2,8,6,4))
> df<-data.frame(x1,x2,x3,x4)
unique(df[c("x2","x4")])

但是变量的唯一级别的数量是不同的,所以我得到了错误:

Error in data.frame(x1, x2, x3, x4) : 
arguments imply differing number of rows: 26, 12, 215, 6

所以不知道如何解决这个问题

我猜你可以试试下面的expand.grid(假设df定义如下)

df <- data.frame(x = paste0("x",1:5),y = paste0("y",1:5),z = paste0("z",1:5))

然后

> expand.grid(df)
x  y  z
1   x1 y1 z1
2   x2 y1 z1
3   x3 y1 z1
4   x4 y1 z1
5   x5 y1 z1
6   x1 y2 z1
7   x2 y2 z1
8   x3 y2 z1
9   x4 y2 z1
10  x5 y2 z1
11  x1 y3 z1
12  x2 y3 z1
13  x3 y3 z1
14  x4 y3 z1
15  x5 y3 z1
16  x1 y4 z1
17  x2 y4 z1
18  x3 y4 z1
19  x4 y4 z1
20  x5 y4 z1
21  x1 y5 z1
22  x2 y5 z1
23  x3 y5 z1
24  x4 y5 z1
25  x5 y5 z1
26  x1 y1 z2
27  x2 y1 z2
28  x3 y1 z2
29  x4 y1 z2
30  x5 y1 z2
31  x1 y2 z2
32  x2 y2 z2
33  x3 y2 z2
34  x4 y2 z2
35  x5 y2 z2
36  x1 y3 z2
37  x2 y3 z2
38  x3 y3 z2
39  x4 y3 z2
40  x5 y3 z2
41  x1 y4 z2
42  x2 y4 z2
43  x3 y4 z2
44  x4 y4 z2
45  x5 y4 z2
46  x1 y5 z2
47  x2 y5 z2
48  x3 y5 z2
49  x4 y5 z2
50  x5 y5 z2
51  x1 y1 z3
52  x2 y1 z3
53  x3 y1 z3
54  x4 y1 z3
55  x5 y1 z3
56  x1 y2 z3
57  x2 y2 z3
58  x3 y2 z3
59  x4 y2 z3
60  x5 y2 z3
61  x1 y3 z3
62  x2 y3 z3
63  x3 y3 z3
64  x4 y3 z3
65  x5 y3 z3
66  x1 y4 z3
67  x2 y4 z3
68  x3 y4 z3
69  x4 y4 z3
70  x5 y4 z3
71  x1 y5 z3
72  x2 y5 z3
73  x3 y5 z3
74  x4 y5 z3
75  x5 y5 z3
76  x1 y1 z4
77  x2 y1 z4
78  x3 y1 z4
79  x4 y1 z4
80  x5 y1 z4
81  x1 y2 z4
82  x2 y2 z4
83  x3 y2 z4
84  x4 y2 z4
85  x5 y2 z4
86  x1 y3 z4
87  x2 y3 z4
88  x3 y3 z4
89  x4 y3 z4
90  x5 y3 z4
91  x1 y4 z4
92  x2 y4 z4
93  x3 y4 z4
94  x4 y4 z4
95  x5 y4 z4
96  x1 y5 z4
97  x2 y5 z4
98  x3 y5 z4
99  x4 y5 z4
100 x5 y5 z4
101 x1 y1 z5
102 x2 y1 z5
103 x3 y1 z5
104 x4 y1 z5
105 x5 y1 z5
106 x1 y2 z5
107 x2 y2 z5
108 x3 y2 z5
109 x4 y2 z5
110 x5 y2 z5
111 x1 y3 z5
112 x2 y3 z5
113 x3 y3 z5
114 x4 y3 z5
115 x5 y3 z5
116 x1 y4 z5
117 x2 y4 z5
118 x3 y4 z5
119 x4 y4 z5
120 x5 y4 z5
121 x1 y5 z5
122 x2 y5 z5
123 x3 y5 z5
124 x4 y5 z5
125 x5 y5 z5

crossing的选项

library(tidyr)
library(purrr)
invoke(crossing, df)

最新更新