【问题标题】:Ocean flows model in R/Excel (millions of data)R/Excel 中的海洋流模型(数百万数据)
【发布时间】:2017-11-06 22:45:48
【问题描述】:

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

  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

该模型的一般概念是将整个世界划分为 2592 个大小为 5x5 度的单元。然后使用公式创建马尔可夫链转移矩阵

在 1 个月内从单元 i 到单元 j 的概率等于:

任何浮标在 1 个月内从单元 i 到单元 j 的次数

除以

任何浮标离开 i 的次数(包括从 i 到 i)。


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

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

1 当经纬度都在 0 和 5 之间时

2 纬度在 0 到 5 之间,经度在 5 到 10 之间

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

以此类推,直到数字 2592

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

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

还有人告诉我,R 在管理此类数据集方面要好得多,但我对它没有经验,自己也找不到解决方案。

非常感谢任何帮助。

【问题讨论】:

  • This question and answer at GIS StackExchange 使用 R sf 包生成i x j 单元格的网格。但这需要熟悉该包及其方法。

标签: r excel probability markov-chains


【解决方案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 ...)

【讨论】:

    猜你喜欢
    • 2020-05-06
    • 1970-01-01
    • 2014-06-11
    • 2021-05-20
    • 1970-01-01
    • 2018-02-22
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多