R中按species列合并多数据框并提取kmers以文件名重命名
解决方法
问题原因
你原有代码错误修改了第二列的列名,且没有提前过滤掉reads、taxReads这类冗余列,导致合并后保留了大量不需要的字段,也没有正确将kmers列替换为来源文件名。
调整后代码
基于你原有plyr包逻辑的版本
首先确保你已经加载plyr包:
library(plyr)
修改后的完整脚本如下:
# 读取所有tsv文件 file_list = list.files(pattern="tsv$") datalist = lapply(file_list, function(x){ # 读入单个tsv文件 dat = read.csv(file=x, header=T, sep = "\t") # 仅保留合并需要的species列和要提取的kmers列 dat = dat[, c("species", "kmers")] # 将kmers列重命名为来源文件名(自动去掉.tsv后缀) colnames(dat)[2] = tools::file_path_sans_ext(x) return(dat) }) # 按species列全连接合并 joined <- join_all(dfs = datalist,by = "species",type ="full" )
可选:tidyverse版本
如果你常用tidyverse生态,也可以用以下写法:
library(tidyverse) file_list = list.files(pattern="tsv$") joined <- map_dfr(file_list, function(x) { read_tsv(x) %>% select(species, kmers) %>% mutate(source = tools::file_path_sans_ext(x)) }) %>% pivot_wider(names_from = source, values_from = kmers)
输出验证
运行后joined就是你需要的结构,第一列为species,后续每一列对应一个来源文件的kmers值,列名就是文件名。
内容的提问来源于stack exchange,提问作者user2300940
相关产品推荐
相关产品推荐

