如何在 R 中向列联表添加行百分比?

r programmingserver side programmingprogramming更新于 2025/4/9 10:07:17

要在 R 中向列联表添加行百分比,我们可以使用 rowSums 和 sum 函数以及表值,并将它们与 cbind 函数结合使用。

例如,如果我们有一个名为 TAB 的表,那么我们可以使用以下命令 − 向 TAB 添加行百分比

cbind(TAB,rowSums(TAB),rowSums(TAB)/sum(TAB))

示例 1

以下代码片段创建了一个示例数据框 −

Grp1<-sample(LETTERS[1:5],20,replace=TRUE)
Grp2<-sample(letters[1:5],20,replace=TRUE)
df1<-data.frame(Grp1,Grp2)
df1

创建以下数据框

Grp1 Grp2
1  A  b
2  D  d
3  A  c
4  A  b
5  D  a
6  D  a
7  A  b
8  B  b
9  A  d
10 A  d
11 B  d
12 B  d
13 E  e
14 C  b
15 E  b
16 E  d
17 C  c
18 E  c
19 E  e
20 E  d

要根据上面创建的数据框中的 Grp1 和 Grp2 列创建列联表,请将以下代码添加到上面的代码片段中 −

Grp1<-sample(LETTERS[1:5],20,replace=TRUE)
Grp2<-sample(letters[1:5],20,replace=TRUE)
df1<-data.frame(Grp1,Grp2)
C_Table1<-table(df1$Grp1,df1$Grp2)
C_Table1

如果将上述所有代码片段作为一个程序执行,则会生成以下输出 −

  a b c d e
A 0 3 1 2 0
B 0 1 0 2 0
C 0 1 1 0 0
D 2 0 0 1 0
E 0 1 1 2 2

要在上面创建的数据框中查找 C_Table1 的行百分比,请将以下代码添加到上面的代码片段中 −

Grp1<-sample(LETTERS[1:5],20,replace=TRUE)
Grp2<-sample(letters[1:5],20,replace=TRUE)
df1<-data.frame(Grp1,Grp2)
C_Table1<-table(df1$Grp1,df1$Grp2)
cbind(C_Table1,rowSums(C_Table1),rowSums(C_Table1)/sum(C_Table1))

输出

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

  a b c d e
A 0 3 1 2 0 6 0.30
B 0 1 0 2 0 3 0.15
C 0 1 1 0 0 2 0.10
D 2 0 0 1 0 3 0.15
E 0 1 1 2 2 6 0.30

示例 2

以下代码片段创建了一个示例数据框 −

f1<-sample(1:4,20,replace=TRUE)
f2<-sample(c(5,10,15,20),20,replace=TRUE)
df2<-data.frame(f1,f2)
df2

创建以下数据框

  f1 f2
1  1 20
2  2  5
3  4  5
4  3 20
5  1 15
6  2  5
7  1 10
8  4  5
9  1  5
10 1 10
11 2 15
12 3 20
13 4  5
14 1 10
15 4  5
16 2 10
17 2 10
18 2 15
19 1  5
20 4 15

要根据上面创建的数据框中的 f1 和 f2 列创建列联表,请将以下代码添加到上面的代码片段中 −

f1<-sample(1:4,20,replace=TRUE)
f2<-sample(c(5,10,15,20),20,replace=TRUE)
df2<-data.frame(f1,f2)
C_Table2<-table(df2$f1,df2$f2)
C_Table2

如果将上述所有代码片段作为一个程序执行,则会生成以下输出 −

  5 10 15 20
1 2  3  1  1
2 2  2  2  0
3 0  0  0  2
4 4  0  1  0

要在上面创建的数据框中查找 C_Table2 的行百分比,请将以下代码添加到上面的代码片段中 −

f1<-sample(1:4,20,replace=TRUE)
f2<-sample(c(5,10,15,20),20,replace=TRUE)
df2<-data.frame(f1,f2)
C_Table2<-table(df2$f1,df2$f2)
cbind(C_Table2,rowSums(C_Table2),rowSums(C_Table2)/sum(C_Table2))

输出

如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −

  5 10 15 20
1 2  3  1  1 7 0.35
2 2  2  2  0 6 0.30
3 0  0  0  2 2 0.10
4 4  0  1  0 5 0.25

相关文章