我的目录中包含名为name_1_class.csv
,name_1_school.csv
,... name_10_class.csv
,name_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)
}
答案 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="") }
类似