R功能是从海洋数据中识别和提取剖面图?

问题描述 投票:0回答:1

我从海洋学设备的部署中获得了一些海洋学数据(时间,深度,浮游生物计数,盐度,温度等)。部署由水柱的多个剖面组成。我将数据中的所有向下转换子集化(当设备下降时),以便在绘制深度随时间变化时,数据如下所示:depth over time

我可以在R中使用哪些代码或函数来自动识别,隔离和提取来自每个单独下调的数据到其自己的对象中(而不必专门标识每个下传的时间)?对于图中的数据,它将实质上生成6个对象。理想情况下,该代码可以轻松地应用于其他部署,每个部署都具有1-7个下调。

我一直在寻找确定数据断点或结构更改的方法,但是没有什么能取得成果。谢谢!

r time-series subset extract breakpoints
1个回答
0
投票

[如果仅在向下转换期间探针下降,即没有这种情况,则>]

深度(i)>深度(i + 1)

对于属于相同下行通道的小区,此代码有效。

[它认为,当一个单元格的深度小于其前一个单元格的深度时-请参阅diff(x)文档-向下转换已结束。因此,在使用此功能之前,您可能需要清理日期。我设置了一个温度列表,以演示如何扩展其他参数的使用范围。

## create test data for depth "Z" and temperature "T"
dc1.Z <- seq(10,100,1)
dc1.T <- seq(15, 3, length.out=length(dc1.Z))   
dc2.Z <- seq(10,90,1)
dc2.T <- seq(18, 1, length.out=length(dc2.Z))
dc3.Z <- seq(20,80,1)
dc3.T <- seq(10, 2, length.out=length(dc3.Z))
dc4.Z <- seq(10,95,1)
dc4.T <- seq(15, 5, length.out=length(dc4.Z))

## join data as specified
dc.Z <- c(dc1.Z, dc2.Z, dc3.Z, dc4.Z)
dc.T <- c(dc1.T, dc2.T, dc3.T, dc4.T)

## get indexes for points where depth increases
indexes <- which(diff(dc.Z) < 0) +1

## define function for spliting a list at given indexes and use it
splitAt <- function(x, pos) unname(split(x, cumsum(seq_along(x) %in% pos)))

splited.dc.Z <- splitAt(dc.Z, indexes)
splited.dc.T <- splitAt(dc.T, indexes)

## check if each of the splited values match the original    
all(dc1.Z == splited.dc.Z[[1]])
all(dc1.T == splited.dc.T[[1]])
all(dc2.Z == splited.dc.Z[[2]])
all(dc2.T == splited.dc.T[[2]])
all(dc3.Z == splited.dc.Z[[3]])
all(dc3.T == splited.dc.T[[3]])
all(dc4.Z == splited.dc.Z[[4]])
all(dc4.T == splited.dc.T[[4]])

我从splitAt获得了函数this question

© www.soinside.com 2019 - 2024. All rights reserved.