小编use*_*667的帖子

如何更改 R 中的分辨率(或重新网格)数据

我有一个数据集,由 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)

r data-manipulation cdo-climate

5
推荐指数
1
解决办法
6472
查看次数

如何用来自另一个矩阵的值(使用 Rcpp)替换 C++ 中矩阵的元素?

我有一个使用 Rcpp 的小型 C++ 函数,它用另一个矩阵的值替换一个矩阵的元素。它适用于单个单元格或如下列:

cppFunction('NumericMatrix changeC(NumericMatrix one, NumericMatrix two) {
NumericMatrix a = one;
NumericMatrix b = two;
b(_,1) = a(_,1);
return b;
}')

changeC(g,f)
Run Code Online (Sandbox Code Playgroud)

如果最初 f 是以下矩阵:

      [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    6    6    6    6    6    6
[2,]    6    6    6    6    6    6
[3,]    6    6    6    6    6    6
[4,]    6    6    6    6    6    6
[5,]    6    6    6    6    6    6
[6,]    6    6    6    6    6    6
Run Code Online (Sandbox Code Playgroud)

和 g 看起来像以下矩阵: …

c++ r matrix rcpp

5
推荐指数
1
解决办法
2613
查看次数

如何将多个对象从 Rcpp 返回到 R?

这可能是一个非常基本的请求,但我在 R 中有一个 Rcpp 函数,它计算我想传回给 R 的各种矩阵。我的代码如下所示:

zeromatrix <- matrix(0,6,1)
east <- matrix(seq(1:48),6,8)
west <- matrix(seq(1:48),6,8)
func <- 'NumericMatrix eastC(NumericMatrix e, NumericMatrix w, NumericMatrix zeromatrix) {
int ecoln=e.ncol();
int ecolnlessone = ecoln - 1;
NumericMatrix eout(e.nrow(),e.ncol()) ;
for (int j = 0;j < ecoln;j++) {
if (j > 0) {
eout(_,j) = e(_,j-1);
} else {
eout(_,j) = e(_,0);
}
}
eout(_,0) = zeromatrix(_,0);
return eout;

NumericMatrix wout(w.nrow(),w.ncol()) ;
for (int j = 0;j < ecoln;j++) {
if (j < …
Run Code Online (Sandbox Code Playgroud)

c++ r rcpp

2
推荐指数
1
解决办法
3208
查看次数

如何将数据从GrAD导出到.csv文件或从NetCDF导出到.csv?

我在将数据从GrADS导出到.csv文件时遇到了真正的困难,尽管它应该非常简单.该文件来自与亚洲降雨有关的APHRODITE项目.基本上我可以使用以下方法将此文件读入GrADS:

open d:/aphro/aphro.ctl
Run Code Online (Sandbox Code Playgroud)

它告诉我:

Data file d:/aphro/APHRO_MA_025deg_V1101R2.%y4 is open as file 1
Lon set to 60.125 149.875
Lat set to -14.875 54.875
Lev set to 1 1
Time values set: 1961:1:1:0 1961:1:1:0
E set to  1 1
Run Code Online (Sandbox Code Playgroud)

如果我执行:

q ctlinfo
Run Code Online (Sandbox Code Playgroud)

它还告诉我,我有三个变量:

precip 1 0 daily precipitation analysis
rstn 1 0  ratio of 0.05 degree grids with station
flag 1 0 ratio of 0.05 degree grids with snow
Run Code Online (Sandbox Code Playgroud)

好的,现在我想做的就是在.csv文件(或.txt)文件中生成一个列表,其中包含以下信息:

Precipitation   Lon    Lat   Time(date)
Run Code Online (Sandbox Code Playgroud)

这听起来很容易,但我无法做到.一种方法是使用:

fprintf precip d:/output.csv %g 1
Run Code Online (Sandbox Code Playgroud)

这给了我一个.csv文件,其中包含当天在一个长列中的整个数据(这就是我想要的).我也可以为lon和lat在不同的文件中做同样的事情并将它们组合起来.问题是输出文件需要很长时间 - …

csv r netcdf grads

1
推荐指数
1
解决办法
4609
查看次数

标签 统计

r ×4

c++ ×2

rcpp ×2

cdo-climate ×1

csv ×1

data-manipulation ×1

grads ×1

matrix ×1

netcdf ×1