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 处停止,因为我们在 i
和 i+5
之间切换,所以我们不想在 90 和 95 之间切换。由于您没有提供原始数据,我无法测试它,如果有问题请告诉我。
编辑
正如 DaveT 所建议的,它可以在一行中使用:
split(hourly.avg.bylat, cut((hourly.avg.bylat$lat, breaks=seq(-90, 90, 5)))
我是使用 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 处停止,因为我们在 i
和 i+5
之间切换,所以我们不想在 90 和 95 之间切换。由于您没有提供原始数据,我无法测试它,如果有问题请告诉我。
编辑
正如 DaveT 所建议的,它可以在一行中使用:
split(hourly.avg.bylat, cut((hourly.avg.bylat$lat, breaks=seq(-90, 90, 5)))