R中的循环纬度合并

loop latitude binning in R

我是使用 R 的新手,在创建循环时遇到了一些问题。

我有一个从 2017 年到 2019 年的每小时数据的数据框,这些数据具有以度为单位的纬度和经度坐标,以及其他列。纬度既有负值也有正值,跨越半球 - 从 -90 到 +90。我想创建一个循环,将它们分开 5 度纬度带(例如 -45 到 -40),然后将它们输出到单独的表中。

我目前正在使用以下代码将原始数据帧 hourly.avg.bylat 分成单独的数据帧,即 lat.bin.neg90_neg85,我会继续将其写为表格,但我觉得这相当笨拙并且耗时,并且更愿意使用循环来执行此操作。

lat.bin.neg90_neg85<-as.data.frame(split.data.frame(hourly.avg.bylat, cut(hourly.avg.bylat$lat, c(-90, -85), include.lowest=TRUE, labels = "")))

我知道我可以使用 for(i in seq(-90, 90, 5)) 但我有点不知道如何将它们串在一起。

您可以使用列表来存储输出并在循环中进行计算:

output=list()
for(i in seq(-90, 85, 5))
{
  output[[paste0(i,"_",i+5)]]<-as.data.frame(split.data.frame(hourly.avg.bylat,
                               cut(hourly.avg.bylat$lat, c(i, i+5),
                               include.lowest=TRUE, labels = "")))
}

然后您可以使用例如output[["-90_-85"]]

paste0(i,"_",i+5) 为列表键创建字符串。请注意,循环在 85 处停止,因为我们在 ii+5 之间切换,所以我们不想在 90 和 95 之间切换。由于您没有提供原始数据,我无法测试它,如果有问题请告诉我。

编辑

正如 DaveT 所建议的,它可以在一行中使用:

split(hourly.avg.bylat, cut((hourly.avg.bylat$lat, breaks=seq(-90, 90, 5)))