我是一个使用R的新手,但我正在尝试自学和学习,我正在尝试创建一个循环来下载多个met数据文件,并使用worldmet包将其单独保存为csv文件。
我有两个变量,met站点代码和感兴趣的年份。我已经包含了创建所关注年份列表的代码:
Startyear <- "2018"
Endyear <- "2020"
Yearlist <- seq(as.numeric(Startyear), as.numeric(Endyear))
我有一个.csv文件,其中列出了所有需要的站点代码,并已将其读入R。请参见下面的简化版本的 Dataframe ,但总共有204行。此 Dataframe 称为“站点信息”。
code station ctry
037760-99999 GATWICK UK
037690-99999 CHARLWOOD UK
038760-99999 SHOREHAM UK
038820-99999 HERSTMONCEUX WEST END UK
037810-99999 BIGGIN HILL UK
下面是导入一个站点一年的元数据的代码示例
importNOAA(code="037760-99999",year=2019,hourly=TRUE,precip=FALSE,PWC=FALSE,parallel=FALSE,quiet=FALSE)
我知道我可能需要一个嵌套循环来改变这两个变量,但我不确定我是否正确地进行了这一点。我也知道我需要在代码值周围加上引号,以便正确地读取它,但我想知道是否有一个快速的方法将其作为代码的一部分,而不是编辑csv中的所有204个值?
下载文件后,我是否还需要一个单独的循环,或者可以将其包含在一段代码中?
我目前的代码,我相信有很多错误,所以我感谢任何指导,如下
for(i in 1:siteinfo$code) {
for(j in 1:Yearlist){
importNOAA(code=i,year=j,hourly = TRUE, precip= FALSE, PWC= FALSE, parallel = TRUE, quiet = FALSE)
}}
这是目前不工作,所以如果你能帮助我拼凑起来,如果可能的话,提供任何解释,我哪里出了问题,或者我如何可以改善我的编码,我将不胜感激!
2条答案
按热度按时间83qze16e1#
使用
dplyr
和purrr
中的一些函数可以完全避免循环(对于大型数据集和文件更好)。当我试图运行importNOAA
代码时,我得到了一个无效参数的错误,所以我使用了一个更简单的函数调用。这段代码返回一个tbl.df,其中最后一列是data. frame列表,每个data. frame包含一个year-code组合的数据。您可以使用
met_data %>% summarize(met)
将数据展开为一个大data.frame并保存到csv中,或者如果您想将它们全部写入单独的csv中,请使用lapply:hec6srdp2#
你不能像for(i in 1:siteinfo$code){}那样使用for循环...
只是一个简短示例
输出:
因此,只需使用如下索引
也许这是可行的