2014-04-19 137 views
4

R 3.0.3:我有40個csv文件的結構相同,我想rbind到一個文件,所以我可以計算一列的平均值。R 3.0.3 rbind多個csv文件

我搜索:

  • 本網站
  • R in a Nutshell
  • R_Intro來源
  • ?rbind Help在RStudio

我無法找到答案。

任何建議/指針?

回答

11

使用從這裏的答案[Importing several files and indexing them]

列表文件以.csv擴展名 - 這是假定你的工作目錄中唯一的.csv文件是你想讀

files <- list.files(pattern = '\\.csv') 

讀的那些文件到列表中 - 是否有標題?

tables <- lapply(files, read.csv, header = TRUE) 

rbind文件

combined.df <- do.call(rbind , tables) 

然後你可以找到意思 - 找到這列是數字

s <- sapply(combined.df, is.numeric) 

發現數值變量的均值

colMeans(combined.df[s]) 
+0

@ user20650 - 謝謝你的回答。如果在'rbind()'之前,我想添加一個唯一標識符(數字如0,1,2等),它可以幫助我區分哪些數據來自文件1,哪些來自文件,那我該如何實現?我目前正在嘗試'loop()',但它有點混亂。 –

+1

@ChetanArvindPatil;在閱讀階段,你可以用'tables < - lapply(文件,函數(x)cbind(read.csv(x,header = TRUE),id = x))''或者帶有' table < - lapply(seq_along(files),function(x)cbind(read.csv(files [x],header = TRUE),id = x))';或者在列表中使用'data.table',如上面的答案:'names(tables)< - files; data.table :: rbindlist(tables,idcol = TRUE)' – user20650

0

在更多的當代plyr方法:

files <- list.files(...) 
data <- adply(files, 1, read.table) 

(這是週六下午:未經測試的代碼,但該方法是罰款)