【问题标题】:convert raster-like matrix to "x,y,z structure" - column names to x, row names to y, values to z [duplicate]将类似栅格的矩阵转换为“x,y,z 结构” - 列名转换为 x,行名转换为 y,值转换为 z [重复]
【发布时间】:2021-06-17 17:34:19
【问题描述】:

这一定有一个简单的解决方案?!我有一个类似栅格的矩阵,其中行和列的名称是值的 x 和 y 坐标。我想把它变成“x,y,z”结构(不需要是数据框)。

下面的示例和所需的输出。事实上,这种方法足以解决我手头的问题,但我仍然对可扩展的方法感到好奇。

我知道这基本上是一个重塑,并且有 reshape2::melt 或 tidyr::pivot_longer 等选项,但我想知道是否有更特定于矩阵的方法来实现这一点,特别是使用基础 R

set.seed(42)
foo <- structure(matrix(round(rnorm(16),1), nrow = 4), dimnames=list(seq(0.1,0.4,.1), seq(0.1,0.4,.1)))
foo
#>      0.1  0.2  0.3  0.4
#> 0.1  1.4  0.4  2.0 -1.4
#> 0.2 -0.6 -0.1 -0.1 -0.3
#> 0.3  0.4  1.5  1.3 -0.1
#> 0.4  0.6 -0.1  2.3  0.6

# desired output: 
data.frame(x = rep(seq(0.1,0.4,.1), each = 4), y = rep(seq(0.1,0.4,.1), 4), z = as.numeric(foo))
#>      x   y    z
#> 1  0.1 0.1  1.4
#> 2  0.1 0.2 -0.6
#> 3  0.1 0.3  0.4
#> 4  0.1 0.4  0.6
#> 5  0.2 0.1  0.4
#> 6  0.2 0.2 -0.1
#> 7  0.2 0.3  1.5
#> 8  0.2 0.4 -0.1
#> 9  0.3 0.1  2.0
#> 10 0.3 0.2 -0.1
#> 11 0.3 0.3  1.3
#> 12 0.3 0.4  2.3
#> 13 0.4 0.1 -1.4
#> 14 0.4 0.2 -0.3
#> 15 0.4 0.3 -0.1
#> 16 0.4 0.4  0.6

【问题讨论】:

标签: r


【解决方案1】:

使用reshape2中的melt获取数据帧输出:

reshape2::melt(foo)

在 r 中有多个选项可以做到这一点。 pivot_longer 等。谷歌搜索,如“从宽转换为长”会产生许多解决方案。

【讨论】:

  • 这当然是一个选项。+1。我想知道是否有更多特定于矩阵的选项可以重塑,最好是使用基本 R 语法。我将在问题中指定这一点,感谢您指出这一点
  • 我接受,因为您帮我找到了相关的重复问题。如果 akrun 没有建议基本 R 版本,我猜 reshape2::melt 是要走的路。实际上,在这个问题stackoverflow.com/a/26838774/7941188 中,akrun does 建议使用基本 R 替代方案 :)
  • 太好了,as.data.frame(as.table(m1)) 是一个不错的解决方案。祝你好运!
猜你喜欢
  • 2017-08-12
  • 2017-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多