2015-02-23 25 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