如何在R中一次从Dataframe列表中写入多个CSV?

时间:2017-06-06 18:30:24

标签: r loops csv dataframe datalist

我有数千个.csv个文件,其中包含以下信息:

Year  HS
1956  1.098
1956  1.785
1956  0.987
....
2012  1.341

我应该做的是:

  1. 在每个文件中找到每年的最高HS
  2. 写入数千个单独的.csv文件,其中包含第1点的信息
  3. 到目前为止(也在本论坛的帮助中),我用这个脚本列出了第1点的数千个数据帧:

        temp <- Sys.glob("*.csv")
    ag <- lapply(temp, function(f) 
      aggregate(HS ~ Year, read.table(f, header = TRUE, sep = ";"), max))
    

    列表如下所示:

    [[1]]
       Year    HS
    1  1956 2.172
    2  1957 1.831
    3  1958 1.713
    .....
    56  2011 2.332
    57  2012 2.917
    
    [[2]]
       Year    HS
    1  1956 2.111
    2  1957 1.864
    3  1958 1.135
    .....
    56  2011 1.032
    57  2012 2.341
    .....
    until thousands dataframes
    

    我正在尝试通过应用这些脚本来编写这些列表中的.csv文件:

        temp <- Sys.glob("*.csv")
    ag <- lapply(temp, function(f) 
      aggregate(HS ~ Year, read.table(f, header = TRUE, sep = ";"), max))
    for(i in 1:length(ag)){
      write.csv(ag[i],file="out[i].csv")
    }
    

    但它只创建out[i].csv,其中包含ag

    的第一个数据帧的信息

    我也在尝试这个剧本:

    temp <- Sys.glob("*.csv")
    ag <- lapply(temp, function(f) 
      aggregate(HS ~ Year, read.table(f, header = TRUE, sep = ";"), max))
    lapply(ag, function(a) 
      write.csv(a, file="out[a].csv"))
    

    同样,它只创建out[a].csv,其中包含ag的第一个数据帧的信息。

    似乎我无法将循环设置为“调用”列表中的数据帧并创建顺序输出.csv名称。这个问题有什么建议吗?

    谢谢。

1 个答案:

答案 0 :(得分:2)

尝试

write.csv(ag[i],file=sprintf("out%d.csv",i))

write.csv(ag[i],file=paste0("out",i,".csv"))

我不确定你是否想在文件名中加上方括号。我会反对它。