【发布时间】:2016-11-09 13:17:30
【问题描述】:
给定矩阵m 如下(1-5 的逐行排列):
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 5 2 4 3
# [2,] 2 1 4 3 5
# [3,] 3 4 1 2 5
# [4,] 4 1 3 2 5
# [5,] 4 3 1 2 5
# [6,] 1 4 2 3 5
# [7,] 4 3 2 5 1
# [8,] 4 1 3 5 2
# [9,] 1 2 3 4 5
# [10,] 4 3 2 1 5
我想知道每个元素 1-5 出现在每行另一个元素之前的次数(即考虑所有可能的对)
例如,对于 (1, 5) 对,1 在 5 之前,在所有行中出现 9 次。另一个示例,对于 (3, 1) 对,3 在 1 之前,在所有行中出现 4 次。我希望所有行中所有可能的对都有相同的结果。也就是说,
# (1, 2), (1, 3), (1, 4), (1, 5)
# (2, 1), (2, 3), (2, 4), (2, 5)
# (3, 1), (3, 2), (3, 4), (3, 5)
# (4, 1), (4, 2), (4, 3), (4, 5)
# (5, 1), (5, 2), (5, 3), (5, 4)
m <- structure(c(1L, 2L, 3L, 4L, 4L, 1L, 4L, 4L, 1L, 4L, 5L, 1L, 4L,
1L, 3L, 4L, 3L, 1L, 2L, 3L, 2L, 4L, 1L, 3L, 1L, 2L, 2L, 3L, 3L,
2L, 4L, 3L, 2L, 2L, 2L, 3L, 5L, 5L, 4L, 1L, 3L, 5L, 5L, 5L, 5L,
5L, 1L, 2L, 5L, 5L), .Dim = c(10L, 5L))
如何在 R 中有效地做到这一点?
编辑
你会如何对这个矩阵做同样的事情?
# [,1] [,2] [,3] [,4] [,5]
# [1,] 3 4 1 5 0
# [2,] 1 2 5 3 0
# [3,] 3 5 0 0 0
# [4,] 4 5 0 0 0
# [5,] 3 4 1 5 2
# [6,] 3 1 2 0 0
# [7,] 4 1 5 2 0
# [8,] 4 3 5 2 0
# [9,] 5 2 0 0 0
# [10,] 5 4 2 0 0
m <- structure(c(3, 1, 3, 4, 3, 3, 4, 4, 5, 5, 4, 2, 5, 5, 4, 1, 1,
3, 2, 4, 1, 5, 0, 0, 1, 2, 5, 5, 0, 2, 5, 3, 0, 0, 5, 0, 2, 2,
0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0), .Dim = c(10L, 5L))
【问题讨论】:
-
m真的包含排列吗?即,在每一行中,每个数字只出现一次(除了 0)?你的实际m有多大? -
@alexis_laz 是的,每个数字每行只出现一次。
m的大小可以为 1000-10000 左右,列数为 2-10 左右。 -
另外,0 是否总是聚集在每行的末尾?
标签: r matrix permutation