2017-04-07 30 views
1

我正在使用以下行来读取一个文本文件。但是,我需要包括阅读文本文件列表,但不是全部。我如何在R中实现这一点?根据部分名称读取R中的文本文件列表

我在C:/ data路径中有多个文件夹。即。 1998_Data,1999_Data ....等等,每个文件夹都有文本文件01.txt ... 49.txt。

在此先感谢。

startingDir<-"C:/Data" 
files <- list.files(path = startingDir,pattern = "24.txt",recursive=T,full.names=T) 

我包含下面的行,但它不读取列表中的所有3个文件。 有什么建议吗?

my_files <- c("24.txt","01.txt","10.txt") 
files <- list.files(path = startingDir,pattern = my_files,recursive=T,full.names=T) 

回答

2

这是因为pattern需要一个正则表达式:

thepattern <- "24\\.txt|01\\.txt|10\\.txt" 
files <- list.files(path = startingDir, 
        pattern = thepattern, 
        recursive=TRUE, 
        full.names=TRUE) 

请记住,你必须躲避点,因为它是另有解释为“任何东西”。

如果你想自动执行此,您可以执行以下操作:

my_files <- c("24.txt","01.txt","10.txt") 
my_files <- gsub(".","\\.",my_files, fixed = TRUE) 
my_pattern <- paste(my_files, collapse = "|") 

你需要gsubfixed = TRUE避免点应被理解为“什么”。另请参见?regex

+0

谢谢。上面的解决方案似乎有效。但是,您的自动化代码不起作用。它不会读取所有文件,而只是读取列表中的第一个文本文件。 – user3408139

+0

@ user3408139我不好,我用'sep'代替'collapse'。更新了代码,以便创建正确的正则表达式。 –

+0

太棒了,现在工作。谢谢。 – user3408139

相关问题