2015-06-14 54 views
1

我想在R中讀取和命名多個.txt文件。要更清楚(示例):我有兩個子文件夾,每個文件夾有三個.txt文件(它們具有相同的名稱)。子文件夾'test'有3個名爲'alpha.txt','bita.txt','gamma.txt'和子文件夾'train'的.txt文件有3個.txt文件,名稱分別爲'alpha.txt','bita.txt 」, 'gamma.txt'。我正在使用以下代碼:在R中讀取和命名多個.txt文件

files <- dir(recursive=TRUE,pattern ='\\.txt$') 
List <- lapply(files,read.table,fill=TRUE) 

它給出了一個包含6個元素的List,每個元素都是一個數據函數。我知道第一個元素是測試文件夾中的'alpha',第二個元素是測試文件夾中的'bita'等等。但由於文件更多,我想讀取數據以便在環境變量中使用:'test_alpha','test_bita','test_gamma','train_alpha','train_bita','train_gamma'。有沒有辦法做到這一點?

+1

with'names(List)< - files'您可以爲列表的每個元素分配名稱標題。從那裏,你可以準確地指定你想要的文件名的哪個方面。就像'names(List)< - gsub('(。*)\\。txt','\\ 1',files)'或其他任何你想保留的名字。此外,您還希望目錄的一個層面向上,也可以在其中工作。 –

回答

1

我在我的工作目錄/train/test中創建了兩個文件夾。我們創建兩個數組並將它們寫入每個文件夾。

df1 <- data.frame(matrix(rnorm(9), 3, 3)) 
df2 <- data.frame(matrix(runif(12), 4,3)) 
write(df1, './test/alpha.txt') 
write(df2, './train/alpha.txt') 

我們運行代碼:

files <- dir(recursive=TRUE,pattern ='\\.txt$') 
List <- lapply(files,read.table,fill=TRUE) 

files 
[1] "test/alpha.txt" "train/alpha.txt" 

它的工作原理到我們需要的文件隔離。接下來我們取出正斜槓和文件擴展名。

newnames <- gsub('/', '_', files) 
newnames1 <- gsub('\\.txt', '', newnames) 
newnames1 
[1] "test_alpha" "train_alpha" 

此向量現在可以分配給List來命名每個數組。

names(List) <- newnames1 
List 
$test_alpha 
      V1   V2   V3   V4  V5 
1 -0.6594299 -0.01881557 0.7076588 -0.7096888 0.3629274 
2 -1.4401000 1.59659000 -1.9041430 2.3079960  NA 

$train_alpha 
     V1  V2  V3  V4  V5 
1 0.9307107 0.6257928 0.6903179 0.5143920 0.6798936 
2 0.3652738 0.9297527 0.1902556 0.7243708 0.4541548 
3 0.5565041 0.5276907  NA  NA  NA