如何找到从 R 中的数据框中获得的交叉表的每个值的比例?
要查找从数据框中获得的交叉表的每个值的比例,我们可以使用prop.table函数。假设我们有一个名为df的数据框,它包含三列,两个分类列,例如C1和C2,一个数值表示Y,那么将使用命令xtabs(Y~.,df)创建交叉表。现在可以通过使用prop.table(xtabs(Y~.,df),1)找到每个值的比例。
示例1
考虑以下数据框-
f1<-sample(LETTERS[1:5],20,replace=TRUE) f2<-sample(letters[1:5],20,replace=TRUE) y1<-rpois(20,50) df1<-data.frame(f1,f2,y1) df1输出结果
f1 f2 y1 1 D e 51 2 C c 59 3 B c 47 4 D a 45 5 E c 45 6 D e 49 7 E c 49 8 E d 63 9 E b 46 10 C c 49 11 A e 66 12 B c 60 13 E d 51 14 B e 49 15 C c 49 16 D a 64 17 A a 55 18 C a 44 19 E a 51 20 A d 56
在df1中为数据创建交叉表-
xtabs(y1~.,df1) f2
f1 a b c d e A 55 0 0 56 66 B 0 0 107 0 49 C 44 0 157 0 0 D 109 0 0 0 100 E 51 46 94 114 0
为df1中的数据创建比例表-
prop.table(xtabs(y1~.,df1),1) f2
f1 a b c d e A 0.3107345 0.0000000 0.0000000 0.3163842 0.3728814 B 0.0000000 0.0000000 0.6858974 0.0000000 0.3141026 C 0.2189055 0.0000000 0.7810945 0.0000000 0.0000000 D 0.5215311 0.0000000 0.0000000 0.0000000 0.4784689 E 0.1672131 0.1508197 0.3081967 0.3737705 0.0000000
示例2
v1<-sample(c("Asian","African","Europe","Oceania","Antarctica"),20,replace=TRUE) v2<-sample(c("Male","Female"),20,replace=TRUE) y2<-sample(2000:1000,20) df2<-data.frame(v1,v2,y2) df2输出结果
v1 v2 y2 1 African Female 1904 2 Oceania Male 1097 3 Asian Male 1883 4 African Male 1384 5 Europe Female 1208 6 Oceania Male 1494 7 Oceania Female 1436 8 Antarctica Male 1858 9 Asian Female 1396 10 Antarctica Female 1905 11 Europe Female 1995 12 Oceania Female 1045 13 Oceania Female 1810 14 Europe Female 1471 15 African Female 1543 16 Oceania Female 1519 17 African Female 1912 18 Asian Female 1520 19 Oceania Male 1604 20 African Male 1096
在df2中为数据创建交叉表-
xtabs(y2~.,df2) v2
v1 Female Male African 5359 2480 Antarctica 1905 1858 Asian 2916 1883 Europe 4674 0 Oceania 5810 4195
为df2中的数据创建比例表-
prop.table(xtabs(y2~.,df2),1) v2
v1 Female Male African 0.6836331 0.3163669 Antarctica 0.5062450 0.4937550 Asian 0.6076266 0.3923734 Europe 1.0000000 0.0000000 Oceania 0.5807096 0.4192904