You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建新df:通过原值/列总和公式转换单元格计算相对丰度

计算物种相对丰度(保留物种名称列)

核心思路

不用删除物种名称列,直接针对数值型样本列计算相对丰度,再与物种列合并即可。以下提供两种适配大规模数据集的方法(支持数百行列):


方法1:基础R实现

先提取数值列计算相对丰度,再合并原物种列:

# 示例数据框(模拟你的数据集结构)
df <- data.frame(
  Species = c("Species_A", "Species_B", "Species_C"),
  Sample1 = c(10, 20, 30),
  Sample2 = c(15, 25, 40),
  Sample3 = c(5, 15, 20)
)

# 提取数值列(排除第一列物种名)
num_cols <- df[, -1]
# 计算每列的总和
col_totals <- colSums(num_cols)
# 计算相对丰度:转置后按行除以列总和,再转置回原结构
rel_abund <- t(t(num_cols) / col_totals)
# 合并物种列与相对丰度数据
new_df <- cbind(df[, 1, drop=FALSE], rel_abund)

方法2:tidyverse(dplyr)实现

更简洁,自动识别数值列,无需手动筛选:

library(dplyr)

# 直接对所有数值列计算相对丰度,保留物种列
new_df <- df %>%
  mutate(across(where(is.numeric), ~ .x / sum(.x)))

为什么你之前的方法失败?

转置后原物种列变成首行字符向量,导致rowwise+c_across计算总和时混入非数值类型,引发错误。上面的方法无需转置,直接针对数值列操作,完美保留物种名称列,同时适配大规模数据集。

内容的提问来源于stack exchange,提问作者salix7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 06:45:33