2016-04-28 25 views
-1

我想從文件名爲x1,x2和x3的三個「.dat」文件中提取矩陣數據,並將它們合併到一個矩陣中。 (爲了方便,我在這裏合併了它們,但應該從三個文件中假設)。每個文件都有3x3的矩陣數據。我想在每個文件中提取一列中相應日期的數據。所以結果會有4列和9行。日期應寫在每個矩陣的第一行,其餘的空格可以填寫NA或離開它們。這裏是文件:enter image description here從「。dat」文件提取數據並形成9x4矩陣

+1

你應該提供一個[再現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)(數據的圖片是沒有幫助)。描述你到底在哪裏遇到麻煩(我們不在這裏只是爲你寫代碼)。顯示您嘗試寫入的代碼以解決問題。 – MrFlick

+1

請勿使用圖像。使用文本,以便讀者可以複製和粘貼它們。同時顯示預期輸出並顯示您嘗試解決方案的代碼。 –

+0

試試'files < - list.files(); lst < - lapply(files,read.csv,skip = 3,header = FALSE); lst2 < - lapply(文件,掃描,跳過= 2,nlines = 1); Datetime < - sub(「。*:\\ s +」,「」,unlist(lst2)); do.call(rbind,Map('cbind',lst,Datetime = Datetime))' – akrun

回答

1

假設文件在數據開始之前有3個標題行,並且所有文件都在工作目錄中。使用list.files()獲取工作目錄中的所有文件。循環訪問'文件',使用read.csv,skip前3行讀取數據集,將header指定爲FALSE。然後,我們從每個帶有scan的文件中刪除子串,直到日期部分用sub,在list元素的每個元素中使用Maprbind創建一個列,使其具有單個data.frame。

files <- list.files() 
lst <- lapply(files, read.csv, skip=3, header=FALSE) 
lst2 <- lapply(files, scan, skip=2, nlines=1, what = "") 
Datetime <- sub(".*:\\s+", "", unlist(lst2)) 
do.call(rbind, Map(cbind, lst, Datetime=Datetime))