For循环不会移动到文件夹中的下一个文件

时间:2014-09-18 14:07:07

标签: r function loops for-loop paste

我正在尝试编写一个for循环,它将从文件夹中的每个连续文件中获取信息,然后将此信息粘贴到data.frame中。文件名仅按年份更改。就目前而言,for循环似乎无法转移到下一年,而只是用第一年的信息填充数据框。我已将工作目录设置为包含所有年份的文件夹。什么命令将改变循环的每次迭代的路径名中的年份,如:

for (year in 2001:2011) {
  2001,2001+1, 2001+2, 2001+3, etc.
}

谢谢!

2 个答案:

答案 0 :(得分:3)

有几种方法可以解决这个问题,但这是一种方法。假设我有一个名为TempDir的文件目录,其中包含文件

> list.files("F:/TempDir")
[1] "tempFile_2006.csv" "tempFile_2007.csv" "tempFile_2008.csv" "tempFile_2009.csv" "tempFile_2010.csv"

具有公共根名称tempFile_,后跟一年。然后,您可以使用以下内容选择性地将某些文件读入data.frame列表:

Years <- 2007:2010
dfList <- list(NULL)
length(dfList) <- length(Years)
##
for(i in 1:length(Years)){
  iPath <- paste0("F:/TempDir/tempFile_",Years[i],
                  ".csv")
  dfList[[i]] <- read.csv(
    file=iPath,
    header=TRUE)
  dfList
}
##

这给了我以下data.frame s列表:

> dfList
[[1]]
  X x  y
1 1 1  6
2 2 2  7
3 3 3  8
4 4 4  9
5 5 5 10

[[2]]
  X x  y
1 1 1  6
2 2 2  7
3 3 3  8
4 4 4  9
5 5 5 10

[[3]]
  X x  y
1 1 1  6
2 2 2  7
3 3 3  8
4 4 4  9
5 5 5 10

[[4]]
  X x  y
1 1 1  6
2 2 2  7
3 3 3  8
4 4 4  9
5 5 5 10

我为每个文件写了相同的数据,但显然如果它们包含不同的数据集,data.frame中的list将不相同。

答案 1 :(得分:2)

或者您可以使用lapply。使用@nrussell示例数据。我在2006.csv

中将文件命名为2007.csvworking directory
 list.files(pattern="2\\d+.csv") #I used pattern argument as I have other files in the working directory which I don't want to read
 #[1] "2006.csv" "2007.csv" "2008.csv" "2009.csv" "2010.csv"

 lst <- lapply(list.files(pattern="2\\d+.csv"), 
       function(x) read.csv(x, header=TRUE, sep=""))

lst[1:2]
[[1]]
 X x  y
1 1 1  6
2 2 2  7
3 3 3  8
4 4 4  9
5 5 5 10

[[2]]
X x  y
1 1 1  6
2 2 2  7
3 3 3  8
4 4 4  9
5 5 5 10