如何使用R语言apply()函数计算三维数组的单元格百分比差异
问题原因
你之前的代码误用了prop.table():该函数会以整个数组的所有元素总和为分母计算每个元素的全局占比,后续计算的diff是全局占比的差值,和你需要的「单单元格内男女数值的百分比差异」逻辑完全不符。
可行解决方案
方案1:直接用二维数组运算(最简单,无需apply)
你已经拆分出了男性分组表a和女性分组表b,R支持矩阵/数组的对应元素批量运算,直接按公式计算即可:
result <- round(100 * (1 - b / a), 1)
方案2:基于合并后的三维数组用apply计算
如果要符合你用apply的需求,直接对每个(行,列)组合对应的第三维度数值套入你的公式即可:
result <- apply(HEC1, c(1,2), function(x) round(100*(1 - x["Female"]/x["Male"]), 1))
输出结果
两种方案得到的结果完全匹配你的预期:
Brown Blue Hazel Green Black -12.5 18.2 50.0 33.3 Brown -24.5 32.0 -16.0 6.7 Red -60.0 30.0 0.0 0.0 Blond -33.3 -113.3 0.0 0.0
注:四舍五入精度差异导致个别小数位和你给出的预期略有出入,可调整round函数的位数参数适配你的需求
内容的提问来源于stack exchange,提问作者cn838
相关产品推荐
相关产品推荐

