【发布时间】:2019-09-04 19:56:47
【问题描述】:
编辑:在底部添加示例数据。
我想组合存储在分层列表中的多个矩阵。分层列表如下所示:
Bodies of Water - Sea - Sea vs Sea - DataFrame
- Matrix
- Sea vs Lake - DataFrame
- Matrix
- Sea vs Pond - DataFrame
- Matrix
- Lake - Lake vs Sea - DataFrame
- Matrix
- Lake vs Lake - DataFrame
- Matrix
...
- Pond vs Pond - DataFrame
- Matrix
最终我想组合这些矩阵,使它们看起来像这样,其中名称代表一个数字矩阵,与它们来自的父文件夹有关。我当然不是在争取一个字符串的文字表。
Sea vs Sea | Sea vs Lake | Sea vs Pond
----------------|--------------|--------------
Lake vs Sea | Lake vs Lake | Lake vs Pond
----------------|--------------|--------------
Pond vs Sea | Pond vs Lake | Pond vs Pond
但是,我不知道该怎么做。由于它们是有序的,我认为一个好的起点是创建一个矩阵列表或数组:
AllMtx <- 'Bodies of Water'$[[i]]"[["Matrix"]]
或
AllMtx <- list.search('Bodies of Water'$[[i]], all(. == Matrix)
两者都没有接近工作,这无助于我努力让list.search返回完整列表,而不仅仅是将名为“Matrix”的对象的每个值存储在它自己的元素中在新列表中。
然后我想我可以使用这个列表或数组或我制作的任何东西,结合 rbind 和 cbind 命令,并生成最终矩阵,例如
cbind(
(rbind(AllMtx, 1:3)),
(rbind(AllMtx, 4:6)),
(rbind(AllMtx, 7:9))
)
我希望这可能有点类似于一种组合矩阵的明智方式,首先将 '... vs Sea'、'... vs Lake' 和 '... vs Pond' 组合成行,然后最终将它们组合在一起以适合三列。
当然,我并不介意如何获得最终矩阵,但解释我正在尝试做的事情通常会得到有用的反馈。
示例矩阵:
list(AvsA = structure(c(1, 4, 5, 6, 1, 7, 4, 8, 1), .Dim = c(3L,
3L)), AvsB = structure(c(3, 3, 4, 5, 5, 4, 3, 9, 2), .Dim = c(3L,
3L)), BvsA = structure(c(2, 9, 3, 4, 5, 5, 4, 3, 3), .Dim = c(3L,
3L)), BvsB = structure(c(1, 3, 4, 5, 1, 4, 3, 9, 1), .Dim = c(3L,
3L)))
"V1" "V2" "V3" "V1" "V2" "V3"
"1" 1 6 4 "1" 3 5 3
"2" 4 1 8 "2" 3 5 9
"3" 5 7 1 "3" 4 4 2
"V1" "V2" "V3" "V1" "V2" "V3"
"1" 2 4 4 "1" 1 5 3
"2" 9 5 3 "2" 3 1 9
"3" 3 5 3 "3" 4 4 1
最终矩阵示例:
structure(c(1, 4, 5, 3, 3, 4, 6, 1, 7, 5, 5, 4, 4, 8, 1, 3, 9,
2, 2, 9, 3, 1, 3, 4, 4, 5, 5, 5, 1, 4, 4, 3, 3, 3, 9, 1), .Dim = c(6L,
6L))
"V1" "V2" "V3" "V4" "V5" "V6"
"1" 1 6 4 2 4 4
"2" 4 1 8 9 5 3
"3" 5 7 1 3 5 3
"4" 3 5 3 1 5 3
"5" 3 5 9 3 1 9
"6" 4 4 2 4 4 1
为了获得上述结果,rbind 和 cbind 的组合似乎可以工作。但是,我仍在努力将所有小的“矩阵”对象合并到一个列表中。
【问题讨论】:
-
请使用
dput和预期输出显示一个小的可重复示例 -
@akrun 我在底部添加了一些示例数据(没有列表的问题)。
标签: r list matrix merge hierarchy