基于Project分组对n列值归一化至100%的R语言技术问题
解决按Project分组将n列归一化为比例的问题
你当前使用的scale()函数是做标准化处理(将数据转换为均值为0、标准差为1的分布),这和你需要的「将每组内的n值转换为占组内总和的比例(总和为100%)」需求不符。
正确的dplyr实现代码
由于你的数据框ex当前是按Project和reaction双重分组的(从dput结果的groups字段可见),需要先重新按Project单独分组,再计算每个n值的占比:
library(dplyr) # 重新按Project分组,计算归一化比例 perc <- ex %>% ungroup() %>% # 取消原有双重分组 group_by(Project) %>% mutate(norm = n / sum(n)) %>% # 计算每组内n的占比 select(Project, reaction, norm) # 保留需要的列
验证结果
以你给出的示例数据为例:
Ga0598239组的n总和为3275,其中arsenate-reduction的n值为103,计算得103/3275 ≈ 0.0314,和你预期的0.0312(四舍五入差异)一致;carbon-fixation的n值为11,计算得11/3275 ≈ 0.00336,和预期的0.0033一致。
运行代码后,perc数据框会包含你需要的Project、reaction和norm列,所有组内的norm值总和为1(即100%)。
内容的提问来源于stack exchange,提问作者Geomicro
相关产品推荐
相关产品推荐

