我有一个包含大量缺失数据点的月度数据的时间序列,设置为NA.我想简单地从数据中减去年度周期,忽略丢失的条目.似乎分解函数无法处理丢失的数据点,但我在其他地方看到过建议使用季节性包.但是我也遇到了NA的问题.
以下是使用内置数据集的问题的最小可重现示例...
library(seasonal)
# set range to missing NA in Co2 dataset
c2<-co2
c2[c2>330 & c2<350]=NA
seas(c2,na.action=na.omit)
Error in na.omit.ts(x) : time series contains internal NAs
Run Code Online (Sandbox Code Playgroud)
是的我知道!这就是为什么我要你省略它们!我们试试这个:
seas(c2,na.action=na.x13)
Error: X-13 run failed
Errors:
- Adding MV1981.Apr exceeds the number of regression effects
allowed in the model (80).
Run Code Online (Sandbox Code Playgroud)
嗯,有趣,不知道这意味着什么,好吧,请排除NA:
seas(c2,na.action=na.exclude)
Error in na.omit.ts(x) : time series contains internal NAs
Run Code Online (Sandbox Code Playgroud)
这没多大帮助!并且好的措施
decompose(c2)
Error in na.omit.ts(x) : time series contains internal NAs
Run Code Online (Sandbox Code Playgroud)
我在以下内容:
R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright …Run Code Online (Sandbox Code Playgroud) 我有一个数据集,由 lon、lat 和涵盖 1961 年至 1970 年的月平均变量(例如温度或降水)组成。该数据集的分辨率为 0.5 x 0.5 度经/纬度,覆盖整个地球,并以 .我使用 R 提取数据的 NC 文件:
library(ncdf)
f <- open.ncdf("D:/CRU/cru_ts3.21.1961.1970.tmp.dat.nc")
A <- get.var.ncdf(nc=f,varid="tmp")
B <- get.var.ncdf(nc=f,varid="lon")
C <- get.var.ncdf(nc=f,varid="lat")
D <- cbind(expand.grid(B, C))
E <- expand.grid(A)
Run Code Online (Sandbox Code Playgroud)
扩展网格(E)是由31,104,000行变量组成的数据表,扩展网格(D)是由259,200行经/纬度组成的数据表。如果乘以 259,200 * 10 年 * 12 个月,您将得到 31,104,000。因此,可以使用以下方法将表 E 分成每月值:
Month <- 1
Start <- (Month-1)*(259200)+1
Finish <- (Month*259200)
G <- E[Start:Finish,]
H <- expand.grid(G)
I <- cbind(D,H)
Run Code Online (Sandbox Code Playgroud)
因此I现在是第一个月(即1961年1月)的数据表,由lon、lat和变量组成。下面给出了数据示例:
lon lat tmp
49184 -68.25 -55.75 7.5
49185 -67.75 -55.75 7.6
49186 -67.25 -55.75 …Run Code Online (Sandbox Code Playgroud) 是否有netcdf操作符(来自nco或任何python netcdf库)可用于覆盖netcdf文件中的特定单元格?
我想更改包含全球气候数据的netcdf文件中的小区域的值.谢谢!
我想提取一个相当大的netcdf文件的空间子集.从Loop到netcdf文件并运行计算 - Python或R.
from pylab import *
import netCDF4
f = netCDF4.MFDataset('/usgs/data2/rsignell/models/ncep/narr/air.2m.1989.nc')
# print variables
f.variables.keys()
atemp = f.variables['air'] # TODO: extract spatial subset
Run Code Online (Sandbox Code Playgroud)
如何仅提取对应于状态(例如爱荷华州)的netcdf文件的子集.爱荷华州有以下边界拉特隆:
经度:89°5'W至96°31'W
纬度:40°36'N至43°30'N
我有一个旋转坐标的NetCDF文件.我需要将它转换为普通的纬度/经度坐标(长度为-180到180,纬度为-90到90).
library(ncdf4)
nc_open('dat.nf')
Run Code Online (Sandbox Code Playgroud)
对于尺寸,它显示:
[1] " 5 variables (excluding dimension variables):"
[1] " double time_bnds[bnds,time] "
[1] " double lon[rlon,rlat] "
[1] " long_name: longitude"
[1] " units: degrees_east"
[1] " double lat[rlon,rlat] "
[1] " long_name: latitude"
[1] " units: degrees_north"
[1] " char rotated_pole[] "
[1] " grid_mapping_name: rotated_latitude_longitude"
[1] " grid_north_pole_longitude: 83"
[1] " grid_north_pole_latitude: 42.5"
[1] " float tasmax[rlon,rlat,time] "
[1] " long_name: Daily Maximum Near-Surface Air Temperature"
[1] " standard_name: air_temperature"
[1] " units: K" …Run Code Online (Sandbox Code Playgroud) 我从这里下载了 netCDF 文件。它们的分辨率为 0.5*0.5。我想以更粗的 1*1 分辨率重新网格这些文件。我找到了一些链接。第一个链接讨论 R 中的重新网格,但不使用双线性插值。在第二个环节涉及双线性插值,但使用的气候数据运算符(到我不是很熟悉)。然后我遇到了一个 R 包HiClimR。在这个包中,一个命令 coarseR降低了数据的分辨率。我将 netCDF 文件转换为 excel 文件并使用coarseR. 但是得到结果后我发现这个命令实际上以某种方式跳过了经纬度并将分辨率降低到1 * 1。简而言之,我的问题是
(1)coarseR用于降低分辨率是否正确?(2) 如何将双线性变换用于我在 R 中的特定问题?
提前谢谢了。
我有一个带有时间序列的netcdf文件,时间变量具有以下典型元数据:
double time(time) ;
time:standard_name = "time" ;
time:bounds = "time_bnds" ;
time:units = "days since 1979-1-1 00:00:00" ;
time:calendar = "standard" ;
time:axis = "T" ;
Run Code Online (Sandbox Code Playgroud)
RI内部想要将时间转换为R日期对象.我通过读取units属性并拆分字符串并使用第三个条目作为我的原点(因此假设间距为"days",时间为00:00等)以硬连线方式实现此目的:
require("ncdf4")
f1<-nc_open("file.nc")
time<-ncvar_get(f1,"time")
tunits<-ncatt_get(f1,"time",attname="units")
tustr<-strsplit(tunits$value, " ")
dates<-as.Date(time,origin=unlist(tustr)[3])
Run Code Online (Sandbox Code Playgroud)
这个硬连线解决方案适用于我的具体示例,但我希望R中可能有一个包很好地处理时间单位的UNIDATA netcdf数据约定并将它们安全地转换为R日期对象?
我知道如何使用 scipy.spatial.distance.cdist 计算数组中点之间的欧几里得距离
类似于此问题的答案: 计算矩阵中一点与所有其他点之间的距离
但是,我想在假设循环边界条件的情况下进行计算,例如,在这种情况下,点 [0,0] 距点 [0,n-1] 的距离为 1,而不是 n-1 的距离。(然后我将为目标单元格阈值距离内的所有点制作一个掩模,但这不是问题的核心)。
我能想到的唯一方法是重复计算 9 次,域索引在 x、y 和 x&y 方向上加/减 n,然后堆叠结果并找到 9 个切片中的最小值。为了说明 9 次重复的需要,我制作了一个简单的示意图,其中仅包含 1 个 J 点,并用圆圈标记,其中显示了一个示例,在这种情况下,用三角形标记的单元格的域中的最近邻居反映为左上角。
这是我使用 cdist 为此开发的代码:
import numpy as np
from scipy import spatial
n=5 # size of 2D box (n X n points)
np.random.seed(1) # to make reproducible
a=np.random.uniform(size=(n,n))
i=np.argwhere(a>-1) # all points, for each loc we want distance to nearest J
j=np.argwhere(a>0.85) # set of J locations to find distance …Run Code Online (Sandbox Code Playgroud) 我有一个用于海洋温度的NetCDF文件。它具有1个变量(“温度”)和4个维度(时间,经度,纬度和深度)。我只想提取每个时间,经度和纬度的最大深度的温度,以获得底海温度栅格砖。我愿意使用R或在终端中使用Climate Data Operators。
NetCDF文件的属性
nc_open('data.pre1980.nc')
File data.pre1980.nc (NC_FORMAT_CLASSIC):
1 variables (excluding dimension variables):
float temp[lon,lat,depth,time]
standard_name: sea_water_temperature
long_name: TEMPERATURE
units: Celsius_scale
_FillValue: -9.98999971057742e+33
missing_value: -9.98999971057742e+33
pointwidth: 1
4 dimensions:
time Size:324 *** is unlimited ***
standard_name: time
units: months since 1960-01-01
calendar: 360_day
axis: T
lon Size:440
standard_name: longitude
long_name: longitude
units: degree_east
axis: X
lat Size:179
standard_name: latitude
long_name: latitude
units: degree_north
axis: Y
depth Size:40
units: meters
axis: Z
gridtype: 0
4 global attributes:
CDI: Climate Data Interface …Run Code Online (Sandbox Code Playgroud) 我使用 xarray 在 python 中打开了一个 netcdf 文件,数据集摘要如下所示。
Dimensions: (latitude: 721, longitude: 1440, time: 41)
Coordinates:
* longitude (longitude) float32 0.0 0.25 0.5 0.75 ... 359.25 359.5 359.75
* latitude (latitude) float32 90.0 89.75 89.5 89.25 ... -89.5 -89.75 -90.0
expver int32 1
* time (time) datetime64[ns] 1979-01-01 1980-01-01 ... 2019-01-01
Data variables:
z (time, latitude, longitude) float32 50517.914 ... 49769.473
Attributes:
Conventions: CF-1.6
history: 2020-03-02 12:47:40 GMT by grib_to_netcdf-2.16.0: /opt/ecmw...
Run Code Online (Sandbox Code Playgroud)
我想得到沿纬度和经度维度的 z 值的平均值。
我尝试使用此代码:
df.mean(axis = 0)
但它正在删除时间坐标,并返回给我这样的东西。
Dimensions: (latitude: …Run Code Online (Sandbox Code Playgroud) netcdf ×7
cdo-climate ×6
r ×6
python ×4
nco ×3
coordinates ×1
distance ×1
geopandas ×1
geospatial ×1
netcdf4 ×1
numpy ×1
performance ×1
raster ×1
rotation ×1
scipy ×1
time-series ×1
unidata ×1
xts ×1