2017-04-07 29 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

相關問題