2012-10-29 121 views
2

我有許多製表符分隔的.txt文件,名爲「abcd001.txt,abcd002.txt」 ....存儲在一個目錄中。 我能夠使用以下代碼導入它們(其中默認目錄與數據文件目錄相同)。它的三列,所有數字類型數據導入和讀取多個文件R

filenames <- list.files(path=".",pattern="abcd+.*txt") 

#list of data in R 
names <-substr(filenames,1,6) 


for(i in names){ 
    filepath <- file.path(".",paste(i,".txt",sep=",")) 
    assign(i, read.table(filepath, 
    colClasses=c("numeric"), 
    sep = "\t")) 
} 

該代碼本身沒有返回任何錯誤。我的疑問是如何訪問正在加載的數據?如何訪問說abcd011.txt文件的數據應該是三列數據

命令:names [3]只是返回文件號000002但是沒有數據。

此處的代碼與此處的代碼類似:Read multiple CSV files into separate data frames

+1

您的麻煩很好地說明了爲什麼使用'assign'來存儲數據集合不能順利進行。如果你想獲得變量的內容,只需使用'get'。或者,只需將數據放入列表中,查看我的答案以獲取詳細信息。 –

回答

8

我建議將read.table的結果放在列表中,或者放在一個位data.frame中。另外,我建議在這裏使用apply樣式循環,標準R(lapply)或plyr。我更喜歡使用plyr,所以我的示例將使用該包。舉個例子:

## Read into a list of files: 
filenames <- list.files(path=".",pattern="abcd+.*txt") 
list_of_data = llply(filenames, read.table, 
             colClasses = c("numeric"), sep = "\t") 

訪問數據現在可以使用來完成:

list_of_data[[1]] 
list_of_data[["abcd1.txt"]] 

或者你可以讀取文件的內容到一個大data.frame

big_data = ldply(filenames, read.table, 
          colClasses = c("numeric"), sep = "\t")) 

訪問內容的文件現在可以使用:

big_data[big_data$variable == "abcd1.txt",] 
+0

謝謝!命令'llply'工作。但是使用'ldply'並使用'big_data [big_data $ variable ==「abcd1.txt」],它返回了'0 coulmns和203400 rows'的數據幀。爲什麼? – Asunius

+0

沒有示例輸出就很難說。我猜''abcd1.txt「'是'variable'列中不存在的條目。 –