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
相关产品推荐
相关产品推荐

