如何生成按行计算的比例表格列表?
按行计算比例表格的R实现
原始数据生成代码
set.seed(222) df = data.frame(x = trunc(runif(10,0,2)), y = trunc(runif(10,4,6)), z = trunc(runif(10,19,21)), m = trunc(runif(10,28,30))) t1 = table(df$x,df$y) t2=table(df$z,df$m) L = list(t1,t2) L1 <- lapply(L, as.data.frame.matrix)
解决方案
以下两种方式均可实现按行计算各元素占该行总和的比例:
方法一:使用apply按行处理
# 遍历列表,对每个矩阵按行计算比例 L_proportions <- lapply(L1, function(mat) { # 对每行执行元素/行总和操作,转置后保持原矩阵结构 t(apply(mat, 1, function(row) row / sum(row))) }) # 查看结果 L_proportions
方法二:使用rowSums结合矩阵运算(更高效)
# 利用向量广播运算实现,代码简洁且效率更高 L_proportions <- lapply(L1, function(mat) { mat / rowSums(mat) }) # 查看结果 L_proportions
输出结果
[[1]] 4 5 0 0.6666667 0.3333333 1 0.7500000 0.2500000 [[2]] 28 29 19 0.6000000 0.4000000 20 0.2000000 0.8000000
说明
- 方法二通过矩阵与行和向量的广播运算完成计算,代码更简洁,且在处理大规模矩阵时效率明显优于方法一。
- 两种方法最终输出结果完全一致,均为按行计算的比例表格。
内容的提问来源于stack exchange,提问作者An116
相关产品推荐
相关产品推荐

