如何根据文件名读取文本文件?

时间:2015-02-23 09:22:23

标签: r text

我在一个文件夹fm中有文本文件,此文件夹为每个网站提供三个不同名称的测量,但它们共享该网站的名称。名称的结构是相似的。我有另一个文件夹st,其中文件名的结构不同,但网站的名称包含在文件名的某处。我想在fm中使用sm中的相应文件(站点名称)绘制三个测量值。

我可以将所有文件读为:

   wgl= read.table("C:\\Users\\wg_ave.txt", sep ='' , header =TRUE)

我可以非常轻松地手动执行此操作,但由于我有几个文件,我想编写一个函数来读取相应的文件,并对文件夹中的所有文件执行此操作。

  First step:Search in folder `fm`files with the same site name
  Wgl: l_name of the site
  Wgk: k_name of the site
  Wger: er_name of the site

阅读它们:

      Wgl= read.table("C:\\Users\\wg_ave.txt", sep ='' , header =TRUE)
       etc….

在文件夹sm中搜索此网站的名称并阅读

wgsitu= read.table("C:\\Users\\wlkave.txt", sep ='' , header =TRUE)

进行计算,绘图,无论

        cor(Wgl$va,wgsitu$fg)
        cor(Wgk$va,wgsitu$fg)
        cor(Wger$va,wgsitu$fg)

其他网站的循环

我感谢任何帮助

2 个答案:

答案 0 :(得分:2)

您可以这样做:(非常原始代码)

files <- list.files("path-to-folder/fm", pattern = "Your File-Pattern", full.names = TRUE)

版本A:
如果网站名称保存在文件列中:

Wgl <- lapply(files, read.table, sep = '', header = TRUE)

然后你提取网站名称

site_names <- sapply(Wgl, function(x) {x$sitename_column})

(这假设所有文件都包含包含站点名称的相同列)

版本B:
如果网站名称是文件名files

的一部分
site_names <- gsub("pattern of pre and suffixes", files)

阅读数据
正如在版本A中所做的那样

site_file_names <- list.files("path-to-folder/sm", pattern = paste0(site_names, collapse = "|"), full.names = TRUE)
dat <- lapply(files, read.table, sep = '', header = TRUE)

答案 1 :(得分:1)

通过网站名称循环可能更容易:

        #set your directory
        setwd("C:\\Users\\fm")

        #you get the list of files in the directory
        lista<-list.files() 

        #example (don't run)
        #lista<-c("l_new","k_new","er_new","l_old","k_old","er_old")

        # I want a loop for each site. Suppose we have 2 sites old and new
        my_site<-c("new","old")


        for (i in 1:length(mysite)) {

        setwd("C:\\Users\\fm")
        #get the 3 files of i site
        files<-grep(my_site[i],lista,fixed=TRUE, value=TRUE)

        Wgl<- read.table(paste("C:\\Users\\fm\\","l_",my_site[i],".txt",sep="")    , sep ='' , header =TRUE)
        Wgk<-read.table(paste("C:\\Users\\fm\\","k_",my_site[i],".txt",sep="")    , sep ='' , header =TRUE)
        Wger<-read.table(paste("C:\\Users\\fm\\","er_",my_site[i],".txt",sep="")   , sep ='' , header =TRUE)

          setwd("C:\\Users\\st")
         Wgl_file<-grep(wgl,list.files(),fixed=TRUE, value=TRUE)
         Wgl_site<-read.table(paste("C:\\Users\\st\\",Wgl_file,sep="")  , sep ='' , header =TRUE)

        Wgk_file<-grep(Wgk,list.files(),fixed=TRUE, value=TRUE)
         Wgk_site<-read.table(paste("C:\\Users\\st\\",Wgk_file,sep="")  , sep ='' , header =TRUE)

        Wger_file<-grep(Wger,list.files(),fixed=TRUE, value=TRUE)
         Wger_site<-read.table(paste("C:\\Users\\st\\", Wger_file,sep="")  , sep ='' , header =TRUE)

[...]
        }