R / Excel中的海洋流模型(数百万数据)

时间:2017-11-06 22:45:49

标签: r excel probability markov-chains

我正在建立一个随机模型来预测漂浮在海洋中的物体的运动。我有来自世界各地的漂流浮标的数千个数据。格式如下:

  index month year lat long

  72615 10 2010 35,278 129,629

  72615 11 2010 37,604 136,365

  72615 12 2010 39,404 137,775

  72615 1 2011 39,281 138,235

  72620 1 2011 35,892 132,766

  72620 2 2011 38,83 133,893

  72620 3 2011 39,638 135,513

  72620 4 2011 41,297 139,448

该模型的一般概念是将整个世界划分为大小为5x5度的2592个单元格。然后使用公式

创建马尔可夫链转移矩阵

1个月内从小区i到小区j的概率等于:

1个月内任何浮标从小区i到小区j的次数

除以

任何浮标出口的次数(包括从i到i)。

但是我有两个与管理数据相关的麻烦。

1。是否有一个简单的解决方案(最好是在Excel或R中)将第6列添加到数据集中,其值仅取决于纬度和经度的值,因此它将等于:

当纬度和经度都在0到5之间

1

2当纬度介于0和5之间,经度介于5和10之间时

3当纬度在0和5之间,经度在10到15之间时

依此类推,最高可达数字2592

2。是否有一种简单的方法可以计算1个月内任何浮标从单元格i到单元格j的次数?

我试图在Excel中找出问题1的解决方案,但想到的不仅仅是按纬度/经度列排序然后手动编写值。

我也被告知R对于管理这些数据集要好得多,但我对它没有经验并且自己找不到解决方案。

我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:1)

有人可能会提出更复杂/更快的东西,但这是一种粗略的方法,具有相对容易理解的好处。

示例数据:

dd <- read.table(header=TRUE,dec=",",text="
index month year lat long
72615 10 2010 35,278 129,629
72615 11 2010 37,604 136,365
72615 12 2010 39,404 137,775
72615 1 2011 39,281 138,235
72620 1 2011 35,892 132,766
72620 2 2011 38,83 133,893
72620 3 2011 39,638 135,513
72620 4 2011 41,297 139,448")

为(0-5)生成等于1的索引,为(6-10)生成2等等

dd$x <- (dd$lat %/% 5) + 1
dd$y <- (dd$long %/% 5) + 1

设置一个空矩阵(不确定我的行/列是否正确)

mm <- matrix(0,nrow=36,ncol=72)

(为了清楚起见,您可能希望在此处使用dimnames参数)

填写:

for (i in 1:nrow(dd)) {
  mm[dd[i,"x"],dd[i,"y"]] <- mm[dd[i,"x"],dd[i,"y"]]+1
}

如果您只有几千行,这可能足够快。我会尝试一下,看看你是否需要更高级的东西。 (如果您需要将矩阵折叠回一组列,可以使用reshape2::melttidyr::gather ...)