G'day,我正在处理一个包含约 125,000 个经纬度位置和日期的大型数据集,用于物种存在/不存在记录。对于每个位置,我想计算出日期和日期前 3 个月内每个位置的天气情况。为此,我下载了在 5 年内获取数据的给定天气变量(例如,最高温度)的每日天气数据。我总共有 1,826 个光栅文件,都在 2-3mb 之间。
我曾计划堆叠所有光栅文件,然后从每个光栅 (1,826) 中为每个点提取一个值。这将产生一个庞大的文件,我可以用它来搜索我需要的日期。但是,这是不可能的,因为我无法堆叠那么多栅格。我尝试将栅格拆分为 500 个堆栈,这可行,但它生成的文件大约 1Gb 并且非常慢(行,125,000;列,500)。此外,当我尝试将所有这些文件带入 R 以创建大数据框时,它不起作用。
我想知道是否有办法在 R 中处理这么多数据,或者是否有一个包可以用来提供帮助。我可以使用像ff这样的包吗?有没有人有什么建议可以用一种不太耗电的方法来做我想做的事情?我曾考虑过类似 lapply 的功能,但以前从未使用过,也不确定从哪里开始。
任何帮助都会非常棒,提前感谢您的宝贵时间。我目前使用但没有成功的代码如下。
亲切的问候,亚当
library(raster)
library(rgdal)
library (maptools)
library(shapefiles)
# To create weather data files, first set the working directory to the appropriate location (i.e., maxt)
# list of raster weather files
files<- list.files(getwd(), pattern='asc')
length(files)
memory.size(4000)
memory.limit(4000)
# read in lon/lat data
X<-read.table(file.choose(), header=TRUE, sep=',')
SP<- SpatialPoints(cbind(X$lon, X$lat))
#separate stacks into mannageable sizes
s1<- stack(files[1:500])
i1 <- extract( s1,SP, cellnumbers = True, layer = 1, nl = 500)
write.table(i1, file="maxt_vals_all_points_all_dates_1.csv", sep=",", row.names= FALSE, col.names= TRUE)
rm(s1,i1)
s2<- stack(files[501:1000])
i2 <- extract( s2,SP, cellnumbers = True, layer = 1, nl = 500)
write.table(i2, file="maxt_vals_all_points_all_dates_2.csv", sep=",", row.names= FALSE, col.names= TRUE)
rm(s2,i2)
s3<- stack(files[1001:1500])
i3 <- extract( s3,SP, cellnumbers = True, layer = 1, nl = 500)
write.table(i3, file="maxt_vals_all_points_all_dates_3.csv", sep=",", row.names= FALSE, col.names= TRUE)
rm(s3,i3)
s4<- stack(files[1501:1826])
i4 <- extract( s4,SP, cellnumbers = True, layer = 1, nl =325)
write.table(i4, file="maxt_vals_all_points_all_dates_4.csv", sep=",", row.names= FALSE, col.names= TRUE)
rm(s4,i4)
# read files back in to bind into final file !!! NOT WORKING FILES ARE TOO BIG!!
i1<-read.table(file.choose(),header=TRUE,sep=',')
i2<-read.table(file.choose(),header=TRUE,sep=',')
i3<-read.table(file.choose(),header=TRUE,sep=',')
i4<-read.table(file.choose(),header=TRUE,sep=',')
vals<-data.frame(X, i1, i2, i3 ,i4)
write.table(vals, file="maxt_master_lookup.csv", sep=",", row.names= FALSE, col.names= TRUE)