R语言中如何将dataframe每行元素除以指定列值实现标准化
R语言按指定行元素对整行做标准化的实现方案
首先构造示例数据方便测试:
df <- data.frame( Gene = c("A1", "A2", "A3"), P1 = c(6, 12, 8), P2 = c(8, 6, 4), P3 = c(2, 3, 8) )
方法1:基础R实现(无需加载第三方包)
直接利用R的向量化运算特性,无需写循环,执行效率高:
# 指定作为除数的列 div_col <- "P3" # 选择需要做标准化的数值列 num_cols <- c("P1", "P2", "P3") # 按行做除法运算 df[num_cols] <- df[num_cols] / df[[div_col]]
如果需要自动识别所有数值列,不用手动指定,可以替换num_cols的定义:
num_cols <- sapply(df, is.numeric)
方法2:dplyr实现(适配tidyverse语法)
适合已经在使用tidyverse生态的代码场景,语法更直观:
library(dplyr) df <- df %>% # 对选中的数值列统一执行:每个元素除以同行的P3值 mutate(across(c(P1, P2, P3), ~ .x / P3))
运算后得到的结果如下:
Gene P1 P2 P3 1 A1 3 4.0 1 2 A2 4 2.0 1 3 A3 1 0.5 1
内容的提问来源于stack exchange,提问作者Foreignbean
相关产品推荐
相关产品推荐

