如何阅读名称相似的文件?

时间:2015-12-21 16:08:37

标签: r

我在名为mydata

的目录中有几个文本文件

我可以这样列出:

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

文件的第一部分名为bg16.txt bg3.txt ….. bg(数字).txt`。

文件的第二部分名为yt16.txt yt3.txt ….. yt(number).txt`。

其余文件名为zj16.txt zj3.txt ...... zj(number).txt

随机数,但最大值为20,min为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).txt称为y,将zj(number).txt称为z,将bg(number).txt称为b,然后查找6的回归}

2 个答案:

答案 0 :(得分: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 :(得分: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)