【问题标题】:For loop is not moving on to next file in folderFor循环没有移动到文件夹中的下一个文件
【发布时间】:2014-09-18 14:07:07
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: r function loops for-loop paste


    【解决方案1】:

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

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

    具有公共根名称tempFile_,后跟一年。然后你可以有选择地将某些文件读入data.frames 的列表,使用如下:

    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.frames 的以下列表:

    > 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
    

    我在每个文件中写入了相同的数据,但很明显,如果它们包含不同的数据集,list 中的data.frames 将不完全相同。

    【讨论】:

      【解决方案2】:

      或者您可以使用lapply。使用@nrussell 示例数据。我在working directory 中将文件命名为2006.csv2007.csv

       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
      

      【讨论】:

      • @nrussell 谢谢,+1 提供数据,当然 OP 要求 for 循环。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 2016-01-25
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多