验证R语言中矩阵与数据框匹配计算颜色占比的代码正确性
代码正确性验证
结论
你的代码是正确的,完全满足计算矩阵每行各颜色对应占比百分比的需求。
验证过程
以第一行aaa为例:
- 根据
color_df映射,蓝色对应列是111、222、333、555、999,该行对应值总和为0 + 0.28047306 + 0.19428708 + 0 + 0 = 0.47476014,乘以100后得到47.47601,与输出结果一致。 - 绿色对应列是
444、666、777、888,该行对应值总和为0.1856996 + 0 + 0.15062710 + 0.18891319 = 0.52523989,乘以100后得到52.52399,与结果一致。 - 红色对应列
101010的值为0,因此红色占比为0,完全符合预期格式。
代码逻辑说明
col_colors <- color_df$colors[match(colnames(mat), color_df$col_names)]:准确匹配了矩阵列名与对应颜色,为后续分组求和建立了正确的对应关系。apply(mat, 1, ...):按行遍历矩阵,对每行数据按颜色分组求和并转换为百分比,逻辑清晰且计算准确。- 最后将矩阵行名作为
id合并到结果数据框,输出格式完全符合需求。
可选通用优化(非必需)
如果后续颜色类别可能变化(不固定为blue/green/red),可以用动态写法避免硬编码颜色值:
# 获取所有唯一颜色 unique_colors <- unique(color_df$colors) # 动态计算每种颜色的占比 color_perc <- t(apply(mat, 1, function(x) { sapply(unique_colors, function(col) { sum(x[col_colors == col]) * 100 }) })) final <- data.frame(id = rownames(mat), color_perc)
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

