是否有可能将多个源目标矩阵合并到一个数据帧中?
Is there a possibility to merge several origin destination matrices into one dataframe?
我已经为一年中的不同周创建了出发地和目的地矩阵,例如输出看起来像:
Region 1
Region 2
Region 3
Region 1
0
8
1
Region 2
4
3
3
Region 3
2
2
3
第 1 周
一年中的所有星期我都有相似的外观矩阵,都代表每对节点之间的 activity。现在,我想计算一个数据框,该数据框显示一年中每周所有不同的起点-终点对 (13x13) activity。我如何使用 R 对此进行编码?
显然我们没有您的数据。我将在这里创建一个小示例数据集,这样您就可以看到一种适合您的方法。
假设我有三个矩阵代表三个星期:
mat1
#> Region 1 Region 2 Region 3
#> Region 1 0 8 1
#> Region 2 4 3 3
#> Region 3 2 2 3
mat2
#> Region 1 Region 2 Region 3
#> Region 1 9 6 2
#> Region 2 3 4 7
#> Region 3 5 8 1
mat3
#> Region 1 Region 2 Region 3
#> Region 1 6 8 5
#> Region 2 9 3 1
#> Region 3 7 4 2
(重新创建这些矩阵的代码以您可以复制并粘贴到 R 控制台的格式显示在该答案的底部)。
首先要做的是将所有矩阵放入列表中(如果它们还没有)
my_list <- list(mat1, mat2, mat3)
现在您可以melt
将矩阵转换成数据框。与其一次做一个,我们可以通过调用 lapply
:
一次完成它们,因为它们在列表中
library(reshape2)
my_dfs <- lapply(my_list, melt)
这将为我们提供一个数据框列表,每周一个。现在我们需要将它们绑定到一个长数据帧中。
df <- do.call(rbind, my_dfs)
最后,我们想在数据框中添加一个额外的列,以便我们知道数据来自哪一周:
df$week <- rep(seq(length(my_list)), each = length(mat1))
这给了我们最终结果:
df
#> Var1 Var2 value week
#> 1 Region 1 Region 1 0 1
#> 2 Region 2 Region 1 4 1
#> 3 Region 3 Region 1 2 1
#> 4 Region 1 Region 2 8 1
#> 5 Region 2 Region 2 3 1
#> 6 Region 3 Region 2 2 1
#> 7 Region 1 Region 3 1 1
#> 8 Region 2 Region 3 3 1
#> 9 Region 3 Region 3 3 1
#> 10 Region 1 Region 1 9 2
#> 11 Region 2 Region 1 3 2
#> 12 Region 3 Region 1 5 2
#> 13 Region 1 Region 2 6 2
#> 14 Region 2 Region 2 4 2
#> 15 Region 3 Region 2 8 2
#> 16 Region 1 Region 3 2 2
#> 17 Region 2 Region 3 7 2
#> 18 Region 3 Region 3 1 2
#> 19 Region 1 Region 1 6 3
#> 20 Region 2 Region 1 9 3
#> 21 Region 3 Region 1 7 3
#> 22 Region 1 Region 2 8 3
#> 23 Region 2 Region 2 3 3
#> 24 Region 3 Region 2 4 3
#> 25 Region 1 Region 3 5 3
#> 26 Region 2 Region 3 1 3
#> 27 Region 3 Region 3 2 3
由 reprex package (v2.0.1)
创建于 2022-03-11
数据
mat1 <- structure(c(0L, 4L, 2L, 8L, 3L, 2L, 1L, 3L, 3L), .Dim = c(3L,
3L), .Dimnames = list(c("Region 1", "Region 2", "Region 3"),
c("Region 1", "Region 2", "Region 3")))
mat2 <- structure(c(9L, 3L, 5L, 6L, 4L, 8L, 2L, 7L, 1L), .Dim = c(3L,
3L), .Dimnames = list(c("Region 1", "Region 2", "Region 3"),
c("Region 1", "Region 2", "Region 3")))
mat3 <- structure(c(6L, 9L, 7L, 8L, 3L, 4L, 5L, 1L, 2L), .Dim = c(3L,
3L), .Dimnames = list(c("Region 1", "Region 2", "Region 3"),
c("Region 1", "Region 2", "Region 3")))
我已经为一年中的不同周创建了出发地和目的地矩阵,例如输出看起来像:
Region 1 | Region 2 | Region 3 | |
---|---|---|---|
Region 1 | 0 | 8 | 1 |
Region 2 | 4 | 3 | 3 |
Region 3 | 2 | 2 | 3 |
第 1 周
一年中的所有星期我都有相似的外观矩阵,都代表每对节点之间的 activity。现在,我想计算一个数据框,该数据框显示一年中每周所有不同的起点-终点对 (13x13) activity。我如何使用 R 对此进行编码?
显然我们没有您的数据。我将在这里创建一个小示例数据集,这样您就可以看到一种适合您的方法。
假设我有三个矩阵代表三个星期:
mat1
#> Region 1 Region 2 Region 3
#> Region 1 0 8 1
#> Region 2 4 3 3
#> Region 3 2 2 3
mat2
#> Region 1 Region 2 Region 3
#> Region 1 9 6 2
#> Region 2 3 4 7
#> Region 3 5 8 1
mat3
#> Region 1 Region 2 Region 3
#> Region 1 6 8 5
#> Region 2 9 3 1
#> Region 3 7 4 2
(重新创建这些矩阵的代码以您可以复制并粘贴到 R 控制台的格式显示在该答案的底部)。
首先要做的是将所有矩阵放入列表中(如果它们还没有)
my_list <- list(mat1, mat2, mat3)
现在您可以melt
将矩阵转换成数据框。与其一次做一个,我们可以通过调用 lapply
:
library(reshape2)
my_dfs <- lapply(my_list, melt)
这将为我们提供一个数据框列表,每周一个。现在我们需要将它们绑定到一个长数据帧中。
df <- do.call(rbind, my_dfs)
最后,我们想在数据框中添加一个额外的列,以便我们知道数据来自哪一周:
df$week <- rep(seq(length(my_list)), each = length(mat1))
这给了我们最终结果:
df
#> Var1 Var2 value week
#> 1 Region 1 Region 1 0 1
#> 2 Region 2 Region 1 4 1
#> 3 Region 3 Region 1 2 1
#> 4 Region 1 Region 2 8 1
#> 5 Region 2 Region 2 3 1
#> 6 Region 3 Region 2 2 1
#> 7 Region 1 Region 3 1 1
#> 8 Region 2 Region 3 3 1
#> 9 Region 3 Region 3 3 1
#> 10 Region 1 Region 1 9 2
#> 11 Region 2 Region 1 3 2
#> 12 Region 3 Region 1 5 2
#> 13 Region 1 Region 2 6 2
#> 14 Region 2 Region 2 4 2
#> 15 Region 3 Region 2 8 2
#> 16 Region 1 Region 3 2 2
#> 17 Region 2 Region 3 7 2
#> 18 Region 3 Region 3 1 2
#> 19 Region 1 Region 1 6 3
#> 20 Region 2 Region 1 9 3
#> 21 Region 3 Region 1 7 3
#> 22 Region 1 Region 2 8 3
#> 23 Region 2 Region 2 3 3
#> 24 Region 3 Region 2 4 3
#> 25 Region 1 Region 3 5 3
#> 26 Region 2 Region 3 1 3
#> 27 Region 3 Region 3 2 3
由 reprex package (v2.0.1)
创建于 2022-03-11数据
mat1 <- structure(c(0L, 4L, 2L, 8L, 3L, 2L, 1L, 3L, 3L), .Dim = c(3L,
3L), .Dimnames = list(c("Region 1", "Region 2", "Region 3"),
c("Region 1", "Region 2", "Region 3")))
mat2 <- structure(c(9L, 3L, 5L, 6L, 4L, 8L, 2L, 7L, 1L), .Dim = c(3L,
3L), .Dimnames = list(c("Region 1", "Region 2", "Region 3"),
c("Region 1", "Region 2", "Region 3")))
mat3 <- structure(c(6L, 9L, 7L, 8L, 3L, 4L, 5L, 1L, 2L), .Dim = c(3L,
3L), .Dimnames = list(c("Region 1", "Region 2", "Region 3"),
c("Region 1", "Region 2", "Region 3")))