r语言 - 加载文件夹中所有文件的特定列,并将它们合并到同一个数据框架中



我有100个.out.tab.tpm格式的文件,对应100个病人。

这是一个。txt文件,可以用fread函数正常读取,它看起来像这样:

gene_id    tpm      count    V4
ENG2023    234      4        152
ENG2048    0        0        1
ENG2087    2        65       6

gene_id是指定基因(基因id)的列,所有文件在该列的值相同。tpm是我感兴趣的测量。

我想要的是加载这些文件,获得gene_idtpm列,并通过gene_id合并。然后调换,病人将是行名,基因将是列名。

类似如下:

PatientID   ENG2023   ENG2048   ENG2087
Patient1    234       0         2
Patient2    123       0         34
Patient3    36        2         1
Patient4    89        0         6
Patient5    456       1         12

你可以为两个文件手动执行:

df1 <- fread("C:/Users/Data/Patient1_ReadsPerGene.out.tab.tpm", select = c("gene_id", "tpm"))
df2 <- fread("C:/Users/Data/Patient2_ReadsPerGene.out.tab.tpm", select = c("gene_id", "tpm"))
df3 <- merge(df1, df2, by="gene_id")

我试着创建一个循环来做这个:

setwd("C:/Users/")
#create a list of the files from your target directory
file_list <- list.files(path="C:/Users/Data/")
#initiate a blank data frame, each iteration of the loop will append the data from the given file to this variable
dataset <- data.frame()
for (i in 1:length(file_list)){
temp_data <- fread(file_list[i], select = c("gene_id", "tpm")) 
dataset <- merge(dataset, temp_data, by="gene_id") 
}

但是,我得到以下错误:

Error in fix.by(by.x, x) : 'by' must specify a uniquely valid column

强调文本

我建议:

library(data.table)
patients <- c("patient1", "patienta", "patienttoto")
all.files <- paste0(patients, ".out.tab.tpm")
l <- lapply(all.files, fread)
names(l) <- patients
for (n in 1:length(patients)) {
l[[n]][, PatientID := patients[n]]
}
dt <- rbindlist(l)
dcast(dt, PatientID ~ gene_id, value.var="tpm")

最新更新