R语言计算test与ref列对数差值均值并新增至数据集的方法求助
实现方案
你可以直接按行计算两个对数差的均值,无需生成中间的对数列,以下提供两种常用实现方式:
基础R实现
假设你的数据集存储在数据框df中,一行代码即可完成计算:
df$mean_log_diff <- rowMeans(log(df[, c("test1", "test2")]) - log(df[, c("ref1", "ref2")]))
如果后续test/ref配对数量增加,也可以用正则匹配批量取列,无需手动写全列名:
test_cols <- grep("^test", names(df), value = T) ref_cols <- grep("^ref", names(df), value = T) df$mean_log_diff <- rowMeans(log(df[, test_cols]) - log(df[, ref_cols]))
dplyr实现(更适合批量处理多配对列的场景)
library(dplyr) df <- df %>% # 按行计算 rowwise() %>% mutate( # 自动匹配所有test/ref列,计算对数差后取均值 mean_log_diff = mean(log(c_across(starts_with("test")) / c_across(starts_with("ref")))) ) %>% ungroup()
以上两种方法都只会在原数据集上新增1个结果列mean_log_diff,不会产生多余的中间列。
内容的提问来源于stack exchange,提问作者Azy
相关产品推荐
相关产品推荐

