如何将多个测序txt文件的列作为新列合并到同一个DataFrame中
你使用purrr::map_df()默认是按行拼接所有读入的表格,每个文件的58524行都会追加到上一个文件的行下方,因此总数据量为226*58524=13226424行,和你遇到的情况完全吻合。
方案1(适用你当前Gene列顺序完全一致的场景,速度最快)
library(tidyverse) # 匹配所有txt文件,修正正则转义符 filelist <- list.files(pattern = ".*\\.txt") # 读取第一个文件,保留Gene列和第一个样本列 final_df <- read_table2(filelist[1]) # 遍历剩余文件,仅提取第二列(样本表达量列)拼接到结果表后 for (f in filelist[-1]) { temp_df <- read_table2(f) final_df <- bind_cols(final_df, temp_df[, 2, drop = FALSE]) }
运行后得到的final_df就是58524行、227列(1列Gene+226列样本)的目标表格,所有样本列的列名会自动保留各文件里的样本ID。
方案2(更通用,后续即使Gene列顺序不一致也可正常合并)
library(tidyverse) filelist <- list.files(pattern = ".*\\.txt") final_df <- map(filelist, ~read_table2(.x)) %>% # 按Gene列关联拼接所有表格,相同基因合并到同一行 reduce(full_join, by = "Gene")
该方案会自动对齐所有文件的Gene名称,即使不同文件的Gene顺序不同、甚至有缺失的基因也能正确合并。
内容的提问来源于stack exchange,提问作者Blake828
相关产品推荐
相关产品推荐

