r - 如何计算交叉表中行和列的百分比?
问题描述
我有一个 3 级列联表,我试图计算表中每个单元格的百分比作为每行总和的函数,然后是每列总和列的函数。这是我要计算百分比的数据:
"A2"
0_15m 15_30m 30_>40m
<35yrs 0_4cm 217 30 3
20_80cm 282 42 14
4_20cm 315 182 82
>=35yrs 0_4cm 334 63 3
20_80cm 310 75 23
4_20cm 433 110 95
dput(A2)
structure(c(217L, 282L, 315L, 334L, 310L, 433L, 30L, 42L, 182L,
63L, 75L, 110L, 3L, 14L, 82L, 3L, 23L, 95L), .Dim = c(6L, 3L), class = "ftable", row.vars = structure(list(
c("<35yrs", ">=35yrs"), c("0_4cm", "20_80cm", "4_20cm")), .Names = c("",
"")), col.vars = structure(list(c("0_15m", "15_30m", "30_>40m"
)), .Names = ""))
我尝试使用 colPercent 函数以及手动计算(参见示例):
其中 A2 是上述数据的 ftable:
rpc <- A2 / rowSums(A2) * 100
cpc <- A2 / colSums(A2) * 100
如您所见,行百分比计算正确(所有行的总和为 100),但列百分比在某些情况下超过 100%,因此计算不正确。
"Row percentages"
0_15m 15_30m 30_>40m
<35yrs 0_4cm 86.800000 12.000000 1.200000
20_80cm 83.431953 12.426036 4.142012
4_20cm 54.404145 31.433506 14.162349
>=35yrs 0_4cm 83.500000 15.750000 0.750000
20_80cm 75.980392 18.382353 5.637255
4_20cm 67.868339 17.241379 14.890282
"Column Percentages"
0_15m 15_30m 30_>40m
<35yrs 0_4cm 11.4754098 1.5864622 0.1586462
20_80cm 56.1752988 8.3665339 2.7888446
4_20cm 143.1818182 82.7272727 37.2727273
>=35yrs 0_4cm 17.6626124 3.3315706 0.1586462
20_80cm 61.7529880 14.9402390 4.5816733
4_20cm 196.8181818 50.0000000 43.1818182
解决方案
根据需要,除法按行而不是按列工作。要开始colSums
工作,您可以转置、划分然后再次转置
t(t(as.matrix(A2))/colSums(A2)) * 100
# 0_15m 15_30m 30_>40m
#
#<35yrs 0_4cm 11.48 5.98 1.36
# 20_80cm 14.91 8.37 6.36
# 4_20cm 16.66 36.25 37.27
#>=35yrs 0_4cm 17.66 12.55 1.36
# 20_80cm 16.39 14.94 10.45
# 4_20cm 22.90 21.91 43.18
或者另一种选择是
A2 / colSums(A2)[col(A2)] * 100
推荐阅读
- office365 - Office 365:创建规则以转发发送到通讯组的电子邮件
- c# - C# 错误中的 XSLT 脚本问题“找不到名为 {urn:my-scripts}Expressions() 的 2 参数函数”
- python - Dango 应用程序未在 Heroku 上正确部署:DEBUG=False 时服务器错误 500,DEBUG=True 时未正确加载索引视图
- c# - 一个使用 Azure AD B2C 的多个客户端 ID(应用程序 ID)的 ASP.NET Core 2.2 Web API 应用程序
- javascript - Chart.js 多个数据集
- javascript - 有没有办法将firestore搜索结果变成一个数组?
- c++ - 字符串返回函数不起作用 - '标识符不足'
- c# - 如何从对象列表构建动态字符串?
- python - 如何使用 subprocess.run() 运行 psexec?
- android - Android Studio gradle app:compileDebugAidl 输入长度 = 1