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

R语言合并列名不同的两个数据框并执行melt长表转换的方法

R数据框合并转长表解决方案

方案1:tidyverse实现(推荐,代码易维护)

首先安装并加载依赖包:

install.packages("tidyverse")
library(tidyverse)

处理并合并数据框代码:

# 处理df1为目标长表结构
df1_long <- df1 %>%
  rename(sum = weight) %>%
  mutate(var = "weight") %>%
  select(treatment, var, sum, sd)

# 处理df2为目标长表结构,先统一列名
df2_long <- df2 %>%
  rename(
    treatment = treatment2,
    sum = area,
    sd = sd2
  ) %>%
  mutate(var = "area") %>%
  select(treatment, var, sum, sd)

# 合并两个长表得到最终结果
final_df <- bind_rows(df1_long, df2_long)

如果单个数据框内有多个测量变量,可使用pivot_longer通用写法适配更多场景:

df1_long <- df1 %>%
  pivot_longer(cols = weight, names_to = "var", values_to = "sum") %>%
  select(treatment, var, sum, sd)

df2_long <- df2 %>%
  rename(treatment = treatment2, sd = sd2) %>%
  pivot_longer(cols = area, names_to = "var", values_to = "sum") %>%
  select(treatment, var, sum, sd)

final_df <- bind_rows(df1_long, df2_long)

方案2:base R实现(无需额外依赖)

无需安装任何第三方包,直接用R原生函数实现:

# 处理df1为目标结构
df1_long <- data.frame(
  treatment = df1$treatment,
  var = "weight",
  sum = df1$weight,
  sd = df1$sd
)

# 处理df2为目标结构
df2_long <- data.frame(
  treatment = df2$treatment2,
  var = "area",
  sum = df2$area,
  sd = df2$sd2
)

# 合并两个数据框
final_df <- rbind(df1_long, df2_long)

最终结果示例

两种方案输出的结果完全一致,符合要求的结构:

treatmentvarsumsd
controlweight0.018725560.008540041
noiseweight0.015754000.007460524
controlarea0.798094440.337949414
noisearea0.680146670.294295847

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:51:03