r-是否有可能将多个来源-目的地矩阵合并为一个数据帧



我为一年中的不同周创建了始发地-目的地矩阵,例如输出看起来像:

第3区<1>3区域3
第1区 第2区
区域1 0 8
地区2 43

显然我们没有您的数据。我将在这里创建一个小的示例数据集,这样您就可以看到一种适合您的方法。

假设我有三个表示三周的矩阵:

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

创建于2022-03-11由reprex包(v2.0.1(


数据

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")))

最新更新