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

R中bind_rows合并数据框丢失数据,如何保留行名类数据?

解决逻辑回归模型结果合并时行名丢失的问题

核心思路是把数据框的行名(属性)转换为正式的数据列,这样合并时就能保留变量名(Intercept、age等),具体方法如下:

1. 单个数据框处理

使用tibble包的rownames_to_column()函数,直接将行名转为新列(比如命名为variable):

library(tibble)
# 假设df是单个模型转换后的结果数据框
df_with_var <- rownames_to_column(df, var = "variable")
# 清除原行名(可选,避免后续混淆)
rownames(df_with_var) <- NULL

2. 批量处理119个模型数据框

假设你的119个模型结果数据框存储在一个列表(比如model_dfs_list)中,推荐用purrr批量处理后合并:

library(purrr)
library(tibble)
library(dplyr)

# 给每个数据框添加变量名列,并标记模型编号(可选)
processed_list <- map(model_dfs_list, ~ rownames_to_column(.x, var = "variable"))

# 合并所有数据框,.id参数自动添加模型编号列
combined_df <- bind_rows(processed_list, .id = "model_id")

如果不用tidyverse包,用基础R循环也能实现:

processed_list <- list()

for (i in 1:length(model_dfs_list)) {
  temp_df <- model_dfs_list[[i]]
  # 添加变量名列
  temp_df$variable <- rownames(temp_df)
  # 添加模型编号(可选)
  temp_df$model_id <- i
  # 清除原行名
  rownames(temp_df) <- NULL
  processed_list[[i]] <- temp_df
}

# 合并所有数据框
combined_df <- do.call(rbind, processed_list)

额外建议:用broom包简化模型结果提取

如果是从逻辑回归模型直接提取结果,推荐用broom包的tidy()函数,它会自动将变量名(Intercept、age等)作为term列返回,无需手动处理行名:

library(broom)
# 提取单个模型结果
model_tidy <- tidy(your_logistic_model)
# 批量提取并合并
combined_tidy <- map_dfr(model_list, tidy, .id = "model_id")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:40:18