如何在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
广告