Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >光栅层序列表上光栅统计量的计算

光栅层序列表上光栅统计量的计算
EN

Stack Overflow用户
提问于 2018-06-28 10:35:12
回答 3查看 968关注 0票数 1

假设我有一个由5个层组成的rasterstack

代码语言:javascript
代码运行次数:0
复制
library(raster)
r <- raster(nrows=10,ncols=10)
r[] <- rnorm(100)
stk <- stack(r,r*2,r+10,r-7, r*6)

我想根据一个不同的数字列表来计算一组层次性的统计数据。

代码语言:javascript
代码运行次数:0
复制
my.seq<-as.numeric(c("2", "1", "2"))

如何计算统计数据(例如平均数):

s中的第1:2层,即my.seq1

s中的第三层,即my.seq2

s中的第4层:5层,即my.seq3

我觉得这最好用循环来实现,但我不知道它是如何工作的。

任何帮助都将受到感激。

编辑

这就是我想做的IRL。我想我应该把它包括在这里,以便为这个问题提供更大的背景。

我试着从每日温度数据中计算月平均值。我正在使用的栅格堆栈有数百个层,每个月的每一天都有一层。所以层1:31合在一起,1970年1月。在上面的示例中,my.seq是一个包含每个月天数的列表。所以我试着计算1:31 (1月),然后32:60 (2月)等等的平均值。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-28 17:30:15

你可以使用stackApply

示例数据

代码语言:javascript
代码运行次数:0
复制
library(raster)
r <- raster(nrows=10, ncols=10, vals=rnorm(100))
stk <- stack(r,r*2,r+10,r-7, r*6)
my.seq <- c(2, 1, 2)

获取索引并使用stackApply

代码语言:javascript
代码运行次数:0
复制
i <- rep(1:length(my.seq), my.seq)
x <- stackApply(stk, i, fun='mean')
票数 2
EN

Stack Overflow用户

发布于 2018-06-28 11:05:51

我不理解你的my.seq的例子,关于你在想要不同光栅子集时所解释的内容。下面是一个有用的示例,其中我使用您定义的子集创建了一个list对象。您所需要做的就是将所需的栅格子集数字索引传递给堆栈对象的双括号索引。列表对象也必须是使用双括号的子集,因此,它看起来是一个混乱的s[[idx[[i]]]]。但是,如果将其分解,对于第一个光栅子集,它仅仅是:raster::calc(s[[1:2]], mean)

代码语言:javascript
代码运行次数:0
复制
library(raster)
file <- system.file("external/test.grd", package="raster")
s <- stack(file, file, file)
s <- addLayer(s, raster(file)/2, raster(file)*2)

idx <- list( c(1:2), c(3), c(4:5) )
s.mean <- stack()
  for(i in 1:length(idx)) {
    s.mean <- addLayer(s.mean, calc(s[[idx[[i]]]], mean) )
  }

s.mean
plot(s.mean)

对于您扩展的问题,您可以使用R中的date类创建索引,更方便的是,rts包允许这些类型的时间序列摘要。

在这里,让我们创建一个包含365层的堆栈,代表一年中的每一天。

代码语言:javascript
代码运行次数:0
复制
library(raster)
f <- raster(nrows=50, ncols=50, xmn=0, xmx=10)
s <- stack()
  for(i in 1:365) {
    x <- f
    x[] <- runif(ncell(x),0,10)
    s <- addLayer(s, x)
}

现在,我们可以创建相应的日期向量。

代码语言:javascript
代码运行次数:0
复制
( d <- seq(as.Date("1970/1/1"), as.Date("1970/12/31"), "days") ) 

可以查询日期向量以提供光栅索引。假设我们想要12月份的平均值,我们可以使用which来生成指数。

代码语言:javascript
代码运行次数:0
复制
( dec.idx <- which( months(d) == "December") )
( dec.mean <- calc(s[[dec.idx]], mean) ) 

您可以轻松地创建一个包含每个月光栅堆栈索引的列表,这相当于您在my.seq对象中描述的内容。

代码语言:javascript
代码运行次数:0
复制
months.idx <- list()   
  for(m in unique( months(d) ) ) {
    months.idx[[m]] <- which( months(d) == m)  
  }  
months.idx

但是,这是内置的功能,用于在rts包中执行这些类型的时间摘要,因此,我们可以通过将堆栈强制到rts对象,然后使用其中一个应用函数来快捷任何for循环。

代码语言:javascript
代码运行次数:0
复制
library(rts)
s.date <- rts::rts(s, d)
( s.month <- apply.monthly(s.date, mean) )
票数 1
EN

Stack Overflow用户

发布于 2018-06-28 11:07:20

该函数使用my.seq提取感兴趣的层(包括可能重复的层,如示例所示)。

您可以将它们放入一个新的stack中,或者在下面代码中提取它们的代码中的层级别上计算/组合统计数据。

代码语言:javascript
代码运行次数:0
复制
new_stack <- function(x){
  tmp <- stack()
  for(i in x){
    new <- stk[[i]]
    tmp <- stack(tmp, new)  
  }
  return(tmp)
}

tmp2 <- new_stack(my.seq) 

现在,我还不能百分之百地确定你想要怎样计算平均值,所以我用了以下几种方法:

代码语言:javascript
代码运行次数:0
复制
stack_mean <- function(x){
  tmp         <- stack()
  layer_means <- numeric()

  for(i in x){
    new <- stk[[i]]

    layer_mean <- mean(stk[[i]]@data@values) 
    print(paste("In layer ", i, "the layer mean is ", layer_mean))

    layer_means <- c(layer_means, layer_mean)

    tmp <- stack(tmp, new)  

  }
  print(paste("Mean of means:", mean(layer_means)))
  return(tmp)
}

stack_mean(my.seq)

这计算了几种方法。首先,分层的方法(我知道这不是你想要的--我只是在展示如何为后代服务):

1“在第2层中,层平均为-0.0981706786020096”1“在第1层中为-0.0490853393010048”1“在第2层中为-0.0490853393010048”1“而在第2层中为-0.0981706786020096”。

然后,这三个层次的平均数:

1“均值:-0.081808898835008”

最后,您了解了stack对象的平均值,这显然是一件事情,尽管我对此不太了解,也不知道这一切到底意味着什么:

mean(tmp2) # equivalently: mean(stack_means(my.seq))

类别: RasterLayer尺寸: 10,10,100 (nrow,ncol,ncell)分辨率: 36,18 (x,y)范围:-180,180,- 90,90 (xmin,xmax,ymin,ymax)。参考:+proj=longlat +datum=WGS84数据源:内存名称:图层值:-5.742679,4.206359 (最小,最大)

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

https://stackoverflow.com/questions/51089335

复制
相关文章
【Apache Ant】ANT解析以及ANT在myEclipse中的使用
Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。
谙忆
2021/01/21
1.5K0
【Apache Ant】ANT解析以及ANT在myEclipse中的使用
为什么在静态方法中不能使用this
在JVM的运行时数据区中有个虚拟机栈(或Java栈),在它的里面是由栈帧'叠加'而成.栈帧由局部变量表,操作数栈,动态连接,方法返回地址等组成.
书唐瑞
2022/06/02
1.9K0
为什么在静态方法中不能使用this
在vue的v-for中,key为什么不能用index?
在前端中,主要涉及的基本上就是 DOM的相关操作 和 JS,我们都知道 DOM 操作是比较耗时的,那么在我们写前端相关代码的时候,如何减少不必要的 DOM 操作便成了前端优化的重要内容。
bb_xiaxia1998
2022/10/01
1.1K0
在vue的v-for中,key为什么不能用index?4
在前端中,主要涉及的基本上就是 DOM的相关操作 和 JS,我们都知道 DOM 操作是比较耗时的,那么在我们写前端相关代码的时候,如何减少不必要的 DOM 操作便成了前端优化的重要内容。
bb_xiaxia1998
2023/01/06
1.1K0
cmake:在Makefile中运行ant脚本
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/51832822
10km
2019/05/25
1.7K0
为什么我退出了编程工作
从很小的时候就在印度出生和成长,在那里我们只有少数的职业选择。工程师和医生是很多人的头两个选择。现在,随着互联网的兴起,事情正在发生变化,但是父母期望孩子成为医生或工程师的情况并不少见。
程序那些事儿
2023/03/07
3150
为什么我退出了编程工作
在ReadWriteLock类中读锁为什么不能升级为写锁?
关于读写锁里面有一个锁升级和降级的问题,也就是写锁可以降级为读锁,但是读锁却不能升级为写锁。那么为什么是这样?
我是攻城师
2018/08/03
3K0
nextline函数_在JAVA中Scanner中的next()和nextLine()为什么不能一起使用?
Java 输入一直是一个坑,本来一直用 Scanner,但一直搞不懂换行符啥的,就用 BufferReader ,但前不久大疆笔试需要持续输入,早忘了 Scanner 怎么写,而那个场景用 Scanner 很好实现 ……
全栈程序员站长
2022/09/05
2.7K0
java中的ant详解
概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个
botkenni
2021/09/23
1.1K0
晶振为什么不能放置在PCB边缘?
某行车记录仪,测试的时候要加一个外接适配器,在机器上电运行测试时发现超标,具体频点是84MHz、144MHz、168MHz,需要分析其辐射超标产生的原因,并给出相应的对策,辐射测试数据如下:
AI 电堂
2022/12/08
3730
晶振为什么不能放置在PCB边缘?
我在 Z 厂的半年工作总结
Z厂前: 在一家K12教育公司(简称S厂),定位是测试开发岗位,主要负责效能工具研发、自动化、服务端压测、测试环境治理,带5人小团队.S厂的测试和测开分发的,测开不负责业务,所以到最后会感觉到脱离业务比较多,S厂离职后面试很吃亏,比如: 美团、阿里、便利峰,技术能力没啥问题,主要是简历中无法体现所负责的业务价值.
测试加
2022/04/27
6660
我在 Z 厂的半年工作总结
Ant中的SVN 使用
最近在调整SDK的打包脚本的时候重新树立了一下ant下面的SVN命令的用法。先简单列举下,以后有精力再慢慢整理细说吧。 svn copy 多用于生成当前版本的tag <arg line="copy SVN_URL1 SVN_URL2 --no-auth-cache --non-interactive --username USERNAME --password PASSWORD -m MSG" /> </exec> svn add 多用于提交在版本打包过程生成的重要文件,例如代码混淆生成的mapp
子勰
2018/05/22
8900
在java中String类为什么要设计成final?
final的出现就是为了为了不想改变,而不想改变的理由有两点:设计(安全)或者效率。
一觉睡到小时候
2019/07/02
9330
在java中String类为什么要设计成final?
在java中String类为什么要设计成final?
String很多实用的特性,比如说“不可变性”,是工程师精心设计的艺术品!艺术品易碎!用final就是拒绝继承,防止世界被熊孩子破坏,维护世界和平!
用户1205080
2018/09/12
1.1K0
在java中String类为什么要设计成final?
工作中我常用的分析算法
统计性描述更为侧重单变量的描述,即描述X、X与X之间的关系,在通过X去描述Y的时候,我更关心X与Y间存在何种关系,此时便需要借助散点图去印证X与Y相关的内在一致性,并通过方差、协方差过渡到统计相关的本质。
许卉
2019/09/24
6310
工作中我常用的分析算法
在IT开发中工作种类的分类
可能很多同学在学习python之前都听说过什么:前端程序员,后端程序员,安全工程师,运维,爬虫,全栈程序员等等各种各样的头衔名称,搞得大家都不知道该怎么选择了。我当初学编程之前也有过类似的经历,所以这里我尽可能给大家解释明白。
python自学网
2021/11/27
9510
在IT开发中工作种类的分类
我在 IBM 从事开源工作的十一年
编者说:  在国际知名公司从事开源工作是一种怎样的体验?  目前越来越多的来自中国的企业、组织或开发者,都纷纷投身到全球技术的开源生态建设大潮中,甚至将开源作为一份全职工作。那在如火如荼的开源热浪中,国内开源爱好者们在国际开源舞台上的参与度如何?作为开源新兵,又该如何步入或活跃于国际开源组织,在开源社区中建立自己的声誉和话语权呢?  带着这些问题,腾源会采访了在 IBM 公司从事 11 年开源工作的高级工程师侯胜博,和他聊聊在 IBM 参与开源背后的那些成长故事,以及在开源社区参与大规模协作过程中所收
腾源会
2021/11/11
5360
聊聊我在腾讯和字节工作感受
大家好,我是鱼皮,最近这段时间,应该是正值大三的小伙伴最忙碌的时候,不少同学都在准备秋季校园招聘。
程序员鱼皮
2021/08/12
3.3K0
谈谈在我在外包公司工作的经历
来源:zhihu.com/question/52994936/answer/958545980
JAVA葵花宝典
2020/11/04
2.5K0
谈谈在我在外包公司工作的经历
在应用开发中,我为什么选择 Flutter 而不是 React Native ?
作为一位开发人员,我想在本文中与大家聊聊跨平台开发领域的两大核心选项——Flutter 与 React Native 框架,并介绍我自己为什么更偏爱 Flutter。
逆锋起笔
2021/01/28
3.3K0

相似问题

输入的defaultValue在ant设计上不能正常工作

6606

为什么我的Ant主构建文件不能正常工作?

32

为什么`<Input>`在Ant设计中没有变化?

12

Ant设计卡不能正确对齐

239

为什么我的混合模型循环不能工作?(RStudio,交叉设计)

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档