如何将R中的两个因子列和一个数字列的数据帧转换为表?

当我们有两个因子列和一个数字列时,我们可以基于因子列为数字值的总数创建一个列联表。这可以借助基本R中的xtabs函数来完成。例如,如果我们有一个名为df的数据框,其中包含两个因子列(例如f1和f2)和一个数字列(例如Y),则可以创建df的列联表通过使用命令xtabs(Y〜f1 + f1,df)。

例1

考虑以下数据帧-

> x1<-sample(LETTERS[1:4],20,replace=TRUE)
> x2<-sample(letters[1:4],20,replace=TRUE)
> y1<-rpois(20,5)
> df1<-data.frame(x1,x2,y1)
> df1
输出结果
   x1 x2 y1
1  B  a  5
2  B  c  6
3  D  b  3
4  D  c  5
5  C  b  8
6  D  c  4
7  B  c  8
8  A  a  3
9  D  c  6
10 D  d  2
11 D  c  9
12 D  c  5
13 C  d  8
14 C  d  6
15 D  d  4
16 C  c  4
17 D  d  5
18 A  c  2
19 A  c  4
20 B  d  5

为df1中的数据创建列联表-

> xtabs(y1~x1+x2,df1)
x2
输出结果
x1 a b c  d
A  3 0 6  0
B  5 0 14 5
C  0 8 4  14
D  0 3 29 11

例2

> var1<-sample(c("G1","G2","G3","G4"),20,replace=TRUE)
> var2<-sample(c("C1","C2","C3","C4"),20,replace=TRUE)
> Response<-rpois(20,2)
> df2<-data.frame(var1,var2,Response)
> df2
输出结果
   var1 var2 Response
1  G3   C2    1
2  G2   C4    4
3  G4   C2    3
4  G2   C3    4
5  G3   C4    1
6  G3   C3    1
7  G4   C1    1
8  G1   C4    3
9  G2   C3    1
10 G2   C1    0
11 G3   C1    1
12 G3   C4    0
13 G1   C1    2
14 G3   C1    1
15 G4   C1    3
16 G1   C2    4
17 G2   C4    2
18 G4   C4    4
19 G2   C4    1
20 G3   C3    0

为df2中的数据创建列联表-

> xtabs(Response~var1+var2,df2)
输出结果
var2
var1 C1 C2 C3 C4
G1   2  4  0  3
G2   0  0  5  7
G3   2  1  1  1
G4   4  3  0  4