Re: [問題] 如何讀入多個CSV檔

作者: wanson (望生)   2016-04-25 14:57:40
想要請問一下
我嘗試使用在單一資料夾內有又不同資料夾
如wd 底下又有x, y, z
x底下有 x1 x2
y有y1 y2
z有z1
我嘗試使用兩個list.files去讀取
setwd("C:/SASMACRO/data")
data.files1 = list.files()
data.files = list.files(path=data.files1,pattern="*.csv")
雖然data.files 可以得到所有個別的csv,分別為x1-z1
似乎都判斷為在x底下資料夾的路徑也就是
C:/SASMACRO/data/x/y1
這導致y1-z1無法在後續的merge的方式處理
要怎樣讓他可以判斷出對應csv的路徑為
C:/SASMACRO/data/x/x1
C:/SASMACRO/data/x/x2
C:/SASMACRO/data/y/y1
C:/SASMACRO/data/y/y2
C:/SASMACRO/data/z/z1
謝謝
另外以上file內檔案並非非常有邏輯,所以使用eval可能不是非常適合
作者: andrew43 (討厭有好心推文後刪文者)   2016-04-25 15:44:00
try: dir(pattern=".csv$", full.names=T, recursive=T)pattern是放標準表示式,而你的重點應該是recursive=T
作者: celestialgod (天)   2016-04-25 16:01:00
.要escape,不然有機會出問題,改成"\\.csv$",不確定這裡有沒有fixed這個參數可以加我平常都直接list.file接grepl. XD
作者: andrew43 (討厭有好心推文後刪文者)   2016-04-25 16:03:00
嗯對,多謝,不然就對應到亂七八糟的東西了。
作者: wanson (望生)   2016-04-25 16:41:00
請問escape要寫在哪? 查了dir function 沒有看到的說
作者: celestialgod (天)   2016-04-25 16:50:00
直接把a大的那個pattern改成我那個就好在字串裡面加escape的意思是regexp裡面有一些字元有意義,必須用\去避免使用該意義,R裡面的字串,要表示\必須先escape他,所以要打\\這應該是R沒有原生regexp interpreter,直接傳到c做的緣故
作者: andrew43 (討厭有好心推文後刪文者)   2016-04-25 17:12:00
在標準表示式裡,"."是除了換行的任何一個字元,是有特別作用的,所以要跳脫。如果沒有跳脫,那"Dcsv"或" csv"都會符合,就不是你要的結果了。
作者: wanson (望生)   2016-04-25 17:42:00
恩恩 謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com