r中的矩阵重排和重组

时间:2016-03-15 13:02:51

标签: r

我在下面的r中有一个矩阵。行中的值将根据行号重复。

format: 'MM/DD/YYYY

如何重新排列上面的矩阵,使其成为

a1  a2  a3  0   0   0   0   0   0
a1  a1  a2  a2  a3  a3  0   0   0
a1  a1  a1  a2  a2  a2  a3  a3  a3

1 个答案:

答案 0 :(得分:3)

我们可以使用applyMARGIN=1循环遍历矩阵的行,将每行中的元素子集化为非零(' x1')和零元素( ' x2'),创建一个按' x1'分组的序列。元素ave,然后是order' x1'基于获得的序列,将(c)与向量中的零元素连接起来,转置(t)以获得输出。

 t(apply(m1, 1, function(x) {
      x1 <- x[x!=0]
      x2 <- x[x==0]
      c(x1[order(as.numeric(ave(x1, x1, FUN=seq_along)))], x2)}))
#   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
#[1,] "a1" "a2" "a3" "0"  "0"  "0"  "0"  "0"  "0" 
#[2,] "a1" "a2" "a3" "a1" "a2" "a3" "0"  "0"  "0" 
#[3,] "a1" "a2" "a3" "a1" "a2" "a3" "a1" "a2" "a3"

数据

m1 <- structure(c("a1", "a1", "a1", "a2", "a1", "a1",
"a3", "a2", "a1", 
"0", "a2", "a2", "0", "a3", "a2", "0", "a3", "a2", "0", "0", 
"a3", "0", "0", "a3", "0", "0", "a3"), .Dim = c(3L, 9L))