如何从R中的矩阵行中提取不同的元素?

时间:2017-11-21 09:24:29

标签: r dataframe

我有一个矩阵如图所示,我想从中提取另一个矩阵,其中每行没有任何重复的元素。

这是输入矩阵

head(Data_Achat2)
  ID_Achat   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
1     1349 433 405 451   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
2     4890 405 405 416 416 388 464 416 388 392 405 393 405 433 453 392 416   0   0   0   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
3     7881 405 384 390 395   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
4     8081 442 405 405 475 464 405 442 405   0   0   0   0   0   0   0   0   0   0   0   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
5     9465 457 417 416 391 441 441 392 441 401 441 432 388 395 466 464 399 475 466 464 481  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
6    10626 432 390 433   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 

换句话说,我想得到第二行的例子:

2     4890 405 416 388 464  388 392  393 433 453  

然后,新矩阵的每一行仅区分输入的元素,并且所有结果都在矩阵中(其中还包括缺失值的0值)。

1 个答案:

答案 0 :(得分:0)

我会逐行应用一个仅保留m唯一值的函数,然后通过向{0}添加N零来将该向量“填充”到长度为N - m的零。独特的价值观:

N <- ncol(Data_Achat2)

t(apply(Data_Achat2, 1, function(x){
  uniques <- unique(x)
  return(c(uniques, rep(0, N-length(uniques))))
}))

结果是:

   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17]    --- [,36] [,37] 
1  1349  433  405  451    0    0    0    0    0     0     0     0     0     0     0     0     0    ---     0     0 
2  4890  405  416  388  464  392  393  433  453     0     0     0     0     0     0     0     0    ---     0     0 
3  7881  405  384  390  395    0    0    0    0     0     0     0     0     0     0     0     0    ---     0     0 
4  8081  442  405  475  464    0    0    0    0     0     0     0     0     0     0     0     0    ---     0     0 
5  9465  457  417  416  391  441  392  401  432   388   395   466   464   399   475   481     0    ---     0     0 
6 10626  432  390  433    0    0    0    0    0     0     0     0     0     0     0     0     0    ---     0     0