列出循环“i”迭代的文件

时间:2017-07-24 09:42:04

标签: r regex loops csv export-to-csv

我的目录中包含名为name_1_class.csvname_1_school.csv,... name_10_class.csvname_10_school.csv

的文件

我正在从目录中读取这些文件,在对csv进行子集化后,我将它们组合成一个文件并将其写入具有迭代名称的新目录。虽然我设法使用直接指定的索引运行此代码,但我想创建一个函数,该函数将基于i作为迭代次数读取csv文件的模式。

我下面的代码显然不起作用,即

school <- list.files(pattern="1-school.csv" )

指定1时工作正常,但我还没弄清楚如何在正则表达式中将索引抽象为i

如何根据迭代序列指定模式?所有建议都表示赞赏(显然我是新手)。

d <- 1:10

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

    school <- list.files(pattern=i"-school.csv" )
    class <- list.files(pattern=i"_class.csv" )

    school <- data.frame(lapply(school, read.csv))
    class <- data.frame(lapply(class, read.csv))

    school <- data.frame(school[, c(2,4,5)])
    school$school <- rep("school")

    class <- data.frame(class[, c(2:4)])
    class$class <- rep("class")


    df <- rbind(school,class)
    dir.create(paste0("iteration",i), showWarnings = FALSE)

    write.csv(df, file.path(paste0("iteration",i), "output_file.csv"), row.names=FALSE)

}

2 个答案:

答案 0 :(得分:2)

您可以将数字i粘贴到字符串中,然后搜索该字符串。像这样:

school <- list.files(pattern=paste0(i,"_school.csv" ))
class <- list.files(pattern=paste0(i,"_class.csv" ))

示例:

i=1

list.files(pattern=".csv")
  "csv1.csv"                "csv2.csv"

list.files(pattern=paste0(i,".csv"))
  "csv1.csv"

答案 1 :(得分:0)

您可以使用粘贴从变量创建字符串。

for (i in 1:n){(paste("df",i,sep="") <-read.csv(paste(i,"-school.csv",sep="") }

类似