建立一个迭代其他data_frame的大data_frame

时间:2019-02-11 17:37:39

标签: r

我有一系列文件,结构如下:

File A
chr1    Start1    End1
.
.
.
chrn    Startn    Endn

File B
chr1    Start1    End1
.
.
.
chrn    Startn    Endn

File n
chr1    Start1    End1
.
.
.
chrn    Startn    Endn

不同文件的长度不相同。我想要一个data_frame(或任何其他合适的解决方案),例如:

df$File_A
df$File_B
df$File_C 

然后:

>print(df$File_A[1,])
>chr1   Start1     End 
>print(df$File_C[n,]) 
>chrn   Startn     End

据我了解,问题在于文件长度不一样,并且我无法构建数据库。

到目前为止,我写道:

library(tidyverse)

where_are_data = "~/Desktop/proof/" 
file.names <- dir(where_are_data, pattern =".bed")

data_frame_promoters <- data.frame()

for (promoter_file in 1:length(file.names)) 
{
a <- str_split(string = file.names[promoter_file], '_')   
b <- a[[1]][1]   
data_1 <- read_tsv(
paste0(where_are_data, file.names[promoter_file]), 
col_names = c("Chromosome","Start","End"))   
name_df_column <- paste0('data_frame_',b)   
assign(name_df, data_1)   
data_frame_promoters$name_df <- rbind(data_frame_promoters$name_df, data_1) 
}

我收到此错误:

Error in `$<-.data.frame`(`*tmp*`, "name_df", value = list(Chromosome = c("chr12",  : 
  replacement has 2 rows, data has 0

您对如何设置data_frame(或任何其他结构)来解决此问题有任何建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

假设您的所有.bed文件都是制表符分隔的格式,其中3列具有相同的数据类型,并且第一行作为列名标题,那么以下内容将满足您的需求。 lapply将使用read.table和tab sep \ t读入所有.bed文件,并指定它们的列名(由col.names设置)。字符串未设置为因素。每个单独的数据集将保存到结果列表“数据集”中。 do.call()函数调用rbind()函数,将列表中的每个元素传递给该函数。结果是一个统一的data.frame

where_are_data = "~/Desktop/proof/" 
file.names <- dir(where_are_data, pattern =".bed")
datasets <- lapply(file.names,FUN=read.table,sep='\t',stringsAsFactors=F,col.names=c("Chromosome","Start","End"),header=T)
df<-do.call(rbind,datasets)