首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将不规则网格转换为规则网格

将不规则网格转换为规则网格
EN

Stack Overflow用户
提问于 2013-01-15 18:22:27
回答 1查看 1.4K关注 0票数 2

我有一组不规则网格的观察结果。我想让它们在分辨率为5的规则网格中。这是一个例子:

代码语言:javascript
运行
复制
d <- data.frame(x=runif(1e3, 0, 30), y=runif(1e3, 0, 30), z=runif(1e3, 0, 30))

 ## interpolate xy grid to change irregular grid to regular

 library(akima)

 d2 <- with(d,interp(x, y, z, xo=seq(0, 30, length = 500),
                  yo=seq(0, 30, length = 500), duplicate="mean"))

如何在SpatialPixelDataFrame类中使用SpatialPixelDataFrame?它有3个列,坐标和插值值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-15 19:16:42

你可以像这样使用代码(感谢@hadley的评论):

代码语言:javascript
运行
复制
d3 <- data.frame(x=d2$x[row(d2$z)],
                 y=d2$y[col(d2$z)],
                 z=as.vector(d2$z))

这里的想法是,R中的矩阵只是一个向量,其中包含一些关于其维数的额外信息。as.vector调用删除该信息,将500x500矩阵转换为长度为500*500=250000的线性向量。下标运算符[也执行同样的操作,因此尽管rowcol最初返回一个矩阵,但它也被视为线性向量。因此,总共有三个矩阵,将它们都转换为具有相同顺序的线性向量,使用其中两个来索引xy向量,并将结果合并到一个数据帧中。

我最初的解决方案没有使用rowcol,而是使用rep来制定xy列。它更难理解和记忆,但可能会更有效,并为您提供一些对更困难的应用程序有用的见解。

代码语言:javascript
运行
复制
d3 <- data.frame(x=rep(d2$x, times=500),
                 y=rep(d2$y, each=500),
                 z=as.vector(d2$z))

对于这个公式,您必须知道R中的矩阵存储在column-major order中。因此,线性化向量的第二个元素是d2$z[2,1],因此行数将在两个相继的值之间变化,而列数将在整个列中保持不变。因此,您希望将x向量作为一个整体重复,但要单独重复y的每个元素。这就是两个rep调用所做的事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14335585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档