Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从NETCDF R生成时间序列向量(空间平均值)_R_Datetime_Raster_Netcdf_Cdo Climate - Fatal编程技术网

从NETCDF R生成时间序列向量(空间平均值)

从NETCDF R生成时间序列向量(空间平均值),r,datetime,raster,netcdf,cdo-climate,R,Datetime,Raster,Netcdf,Cdo Climate,我有一个NETCDF文件,属性是lon、lat、time和deposition。数据覆盖某个空间域。这是从1960年到2100年的每日数据 1) 我将从主域中对数据进行空间子集(例如lat[45,50]和lon[-78,-85]) 2) 从子集中,我将对所有网格进行平均,并生成一个单列每日时间序列,然后将其写入.csv文件 注意:我的数据包含缺少的值这方面的一些东西应该是有效的 library(raster) b <- brick('file.nc') be <- crop(b, e

我有一个NETCDF文件,属性是lon、lat、time和deposition。数据覆盖某个空间域。这是从1960年到2100年的每日数据

1) 我将从主域中对数据进行空间子集(例如lat[45,50]和lon[-78,-85])

2) 从子集中,我将对所有网格进行平均,并生成一个单列每日时间序列,然后将其写入.csv文件


注意:我的数据包含缺少的值

这方面的一些东西应该是有效的

library(raster)
b <- brick('file.nc')
be <- crop(b, extent(-85, -78, 45, 50))
a <- aggregate(be, dim(be)[2:1], na.rm=TRUE)
v <- values(a)
write.csv(v, 'precip.csv', row.names=FALSE)
库(光栅)

这方面的东西应该行得通

library(raster)
b <- brick('file.nc')
be <- crop(b, extent(-85, -78, 45, 50))
a <- aggregate(be, dim(be)[2:1], na.rm=TRUE)
v <- values(a)
write.csv(v, 'precip.csv', row.names=FALSE)
库(光栅)

b这将进行切割和平均,但将答案写入另一个netcdf。如果您确实需要CSV,那么您需要使用上述解决方案的这一部分

cdo fldmean -sellonlatbox,-85,-78,45,50 in.nc out.nc

这将进行切割和平均,但会将答案写入另一个netcdf。如果您确实需要CSV,那么您需要使用上述解决方案的这一部分

cdo fldmean -sellonlatbox,-85,-78,45,50 in.nc out.nc
库(ncdf4)
nc
库(ncdf4)

太棒了!非常感谢@RobertH。正是我想要的。如何使日期列显示为人类可读?非常感谢。我编辑了答案来回答这个额外的问题。太好了!非常感谢@RobertH。正是我想要的。如何使日期列显示为人类可读?非常感谢。我已经编辑了回答这个附加问题的答案。谢谢这个解决方案。太棒了。我现在使用cdo、ncl或nco进行大多数操作。感谢您提供此解决方案。太棒了。我现在使用cdo、ncl或nco进行大多数操作。请分享一些关于此代码如何解决问题的解释警告:此解决方案将给出错误的答案,因为它不会对高纬度地区变小的单元格产生影响。。。例如,请查看此答案:请分享有关此代码如何解决问题的一些解释警告:此解决方案将给出错误的答案,因为它不会对高纬度地区变小的单元格产生影响。。。例如,请参见此答案:
cdo fldmean -sellonlatbox,-85,-78,45,50 in.nc out.nc
library (ncdf4)

nc <- nc_open("netcdf.nc")

lon <- ncvar_get(nc,"lon")
lat <- ncvar_get(nc,"lat")
time <- ncvar_get(nc,"time")

lon_lim <- c(45,50)
lat_lim <- c(-78,-85)

lon_ind <- which(lon >= lon_lim[1] & lon <= lon_lim[2])
lat_ind <- which(lat >= lat_lim[1] & lat <= lat_lim[2])

precip <- ncvar_get(nc,"precip",start = c(lon_ind[1],lat_ind[1],time),count = c(length(lon_ind),length(lat_ind),length(time)))

ts <- apply(precip,3,mean,na.rm=TRUE)