簡體   English   中英

將數千個 csv 文件合並到一個 R 中的單個 dataframe

[英]Merging thousands of csv files into a single dataframe in R

我有 2500 個 csv 文件,所有文件都具有相同的列和可變數量的觀察值。
每個文件大約 3mb(每個文件約 10000 個 obs)。
理想情況下,我想將所有這些讀入單個 dataframe。
每個文件代表一代,並包含有關性狀、表型和等位基因頻率的信息。
在讀取這些數據時,我還嘗試在每次讀取時添加一個額外的列來指示生成。

我寫了以下代碼:

read_data <- function(ex_files,ex){
  df <- NULL
  ex <- as.character(ex)
  for(n in 1:length(ex_files)){
    temp <- read.csv(paste("Experiment ",ex,"/all e",ex," gen",as.character(n),".csv",sep=""))
    temp$generation <- n
    df <- rbind(df,temp)
  }
  return(df)
}

ex_files 指的是 list.length,而 ex 指的是重復執行的實驗編號(即我有多個實驗,每個實驗有 2500 個 csv 個文件)。

我目前正在運行它(我希望它寫得正確,)。 然而它需要相當長的時間(如預期的那樣)? 我想知道是否有更快的方法來做到這一點?

在循環中增長對象是低效的。 使用list.files列出您要讀取的所有文件,並使用purrr::map_df將它們組合成一個 dataframe,並帶有一個名為generation的附加列,該列將為每個文件提供唯一編號。

filenames <- list.files(pattern = '\\.csv', full.names = TRUE)
df <- purrr::map_df(filenames, read.csv, .id = 'generation')
head(df)

試試plyr package

filenames = list.files(pattern = '\\.csv', full.names = TRUE)
df = plyr::ldpy(filenames , data.frame)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM