2015-02-23 41 views
0

我在一個文件夾中有文本文件fm,這個文件夾爲每個站點使用不同名稱的三次測量,但它們共享站點的名稱。名字的結構是相似的。我有另一個文件夾st其中文件名稱的結構是不同的,但網站的名稱包含在文件名稱的某處。我想用sm中的相應文件(站點名稱)在fm中繪製三個測量值。如何根據名字讀取文本文件?

我可以讀取所有的文件:

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

你可以做這樣的事情:(很原始的代碼)

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

版本A:
如果站點名保存的列文件:

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

然後你解壓縮sitenames

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

這使得它更容易,因爲你只需要提取文件的SITE_NAMES喜歡的東西 'SITE_NAMES < - GSUB(「模式前後綴「,文件)' Habe看看'?gsub'關於如何工作 – Rentrop 2015-02-23 10:02:14

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) 

[...] 
     } 
+0

我不明白你的問題的這一步。我試圖編輯我的答案 – dax90 2015-02-23 10:51:58

+0

也許我更好地理解你對Floo0的回答。我再次編輯! – dax90 2015-02-23 11:02:43

+0

所以las的步驟可能就是:'setwd(「C:\\ Users \\ st」); st_file <-grep(my_site [i],list.files(),fixed = TRUE,value = TRUE); (paste(「C:\\ Users \\ st \\」,st_file,sep =「」),sep ='',header = TRUE);'? – dax90 2015-02-23 11:14:34