2015-12-21 24 views
2

我有幾個文本文件名爲mydata如何讀取具有相似數字的文件名?

目錄我可以列出他們是這樣的:

dir1<- list.files ("C:\\mydata", "*.txt", full.names = TRUE) 

文件的第一部分被命名爲bg16.txtbg3.txt ….. BG(數字).txt`。

文件的第二部分被命名爲yt16.txt yt3.txt ….. yt(number).txt。其他文件名爲zj16.txtzj3.txt ... .. zj(number).txt

隨機數字,但最大爲20和最小值爲1

我可以讀取數6文件和應用迴歸:

b=read.table("C:\\mydata\\bg6.txt",sep=""): 
     > head(b) 
       x 
      1 0.29 
      2 0.21 
z=read.table("C:\\mydata\\zj6.txt",sep=""): 
     > head(z) 
       x 
      1 0.10 
      2 0.56 
y=read.table("C:\\mydata\\yt6.txt",sep=""): 
     > head(y) 
       x 
      1 0.56 
      2 0.32 
names(b)="b";names(y)="y";names(z)="z" 
dt=cbind(b,y,z) 
res6=lm(y~ b + z, data=dt) 

現在我可以對所有文件一個接一個手動做到這一點,但是這將需要大量的時間。我不知道是否有任何功能,匹配對應的數字文件:greb這三個文件在同一數量bg(number).txt, zj(number).txt, yt(number).txt

yt(number).txtyzj(number).txtzbg(number).txtb,然後找到迴歸爲6

完成

回答

4

您可以拆分文件的名稱以提取字母部分和數字部分。然後,您可以遍歷獨特的數字以獲取每個分析的文件集。像這樣的東西

# test data 
dir1<-c("zj6.txt","yt6.txt","bg6.txt") 

# Using this helper function... https://gist.github.com/MrFlick/10413321 
nn<-do.call(rbind, regcapturedmatches(dir1,regexpr("(\\w+)(\\d+)\\.txt", dir1, perl=T))) 

lapply(unique(nn[,2]), function(n) { 
    b <- read.table(dir1[nn[,1]=="bg" & nn[,2]==n],sep="", col.names="b"); 
    z <- read.table(dir1[nn[,1]=="zj" & nn[,2]==n],sep="", col.names="z"); 
    y <- read.table(dir1[nn[,1]=="yt" & nn[,2]==n],sep="", col.names="y"); 
    lm(y~ b + z, data=cbind(b,z,y)) 
}) 
+1

嘗試'\\ D',而不是'\\ w',並嘗試將在順序返回他們a () – MrFlick

+0

我想如果你搜索這個網站,你很可能會找到這個問題的答案。這與你原來的問題有點無關。 – MrFlick

1

你只需要使用正確的模式。例如,它似乎是您的文件都沒有編號喜歡...001 , ...002,所以這應該抓住的所有文件在第6

list.files('C:\\mydata', pattern = '[^[:digit:]]6.txt', full.names = T) 

結束在你的情況,你只需要擁有三種不同的情況,所以你可以寫

list.files('C:\\mydata', pattern = '((bg)|(zj)|(yt))6.txt', full.names = T) 

現在你可以迭代它,在每一個製作步驟所需要的圖案,例如:

sprintf('((bg)|(zj)|(yt))%i.txt', k) 
相關問題