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

R语言实现Mass_1列每个值与Mass_2列所有值交叉求差的方法

R实现两列全量值两两求差的方案

方法1:基础R实现(无需安装第三方包)

首先构造示例数据:

df <- data.frame(
  X = c(1,2,3),
  Mass_1 = c(109.8, 306.7, 658.7),
  Mass_2 = c(203.4, 305.5, 446.5)
)

执行计算:

# 生成两两差值矩阵,行对应Mass_1取值,列对应Mass_2取值
diff_matrix <- outer(df$Mass_1, df$Mass_2, FUN = "-")
# 为差值列设置规范名称
colnames(diff_matrix) <- paste0("Mass_2_", seq(ncol(diff_matrix)))
# 拼接原标识列得到最终结果
result <- cbind(df[, c("X", "Mass_1")], diff_matrix)

方法2:tidyverse生态实现

适合习惯dplyr语法的场景:

library(dplyr)
library(tidyr)

result <- df %>%
  select(X, Mass_1) %>%
  rowwise() %>%
  mutate(diff_ls = list(Mass_1 - df$Mass_2)) %>%
  unnest_wider(diff_ls, names_sep = "_") %>%
  rename_with(~paste0("Mass_2_", sub("diff_ls_", "", .x)), starts_with("diff_ls_"))

可选:生成带计算式的字符串格式结果

如果需要输出示例中带(数值-数值)格式的字符串结果,可执行以下代码:

str_result <- cbind(
  df[, c("X", "Mass_1")],
  sapply(seq_along(df$Mass_2), function(i) {
    paste0("(", df$Mass_1, "-", df$Mass_2[i], ")")
  }) |> as.data.frame() |> setNames(paste0("Mass_2_", seq_along(df$Mass_2)))
)

内容的提问来源于stack exchange,提问作者Sophia Escobar-Correas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:24:01