R语言中如何将data frame列表转换为逐列拼接的扁平数据表
多数据框列表横向拼接为宽表的实现方案
所有方法均基于R语言环境适配你给出的列表结构(各子数据框行数完全一致,无需额外行对齐):
方案1:purrr + dplyr 高效实现
步骤逻辑清晰,适合常规分析场景:
library(purrr) library(dplyr) # 1. 清理列表元素的命名,去掉后缀.xls,得到干净的样本标识(E9、F12、H1) names(df_list) <- gsub("\\.xls$", "", names(df_list)) # 2. 为每个子数据框的列名添加对应样本前缀,匹配你需要的E9.time、E9.response格式 df_list_prefixed <- imap(df_list, ~set_names(.x, paste0(.y, ".", names(.x)))) # 3. 按列横向拼接所有子数据框 wide_df <- bind_cols(df_list_prefixed)
方案2:Base R 无依赖实现
无需安装任何第三方扩展包,开箱即可运行:
# 1. 清理列表命名 names(df_list) <- gsub("\\.xls$", "", names(df_list)) # 2. 批量为子数据框添加列名前缀 df_list_prefixed <- lapply(names(df_list), function(sample_name){ current_df <- df_list[[sample_name]] setNames(current_df, paste0(sample_name, ".", names(current_df))) }) # 3. 列向拼接生成宽表 wide_df <- do.call(cbind, df_list_prefixed)
优化提示
- 由于所有子表的time列取值完全相同,拼接后可直接删除重复的冗余time列,仅保留一份通用时间列简化表结构:
wide_df <- subset(wide_df, select = -c(F12.time, H1.time)) - 拼接逻辑默认按照子数据框的行顺序完全对齐,因为你已确认各表行数一致,不存在行错位风险。
内容的提问来源于stack exchange,提问作者Sophia
相关产品推荐
相关产品推荐

