2015-06-14 58 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