Сортировка столбцов разреженной матрицы в определенном порядке R

Поэтому у меня есть разреженная матрица pbmc.data с ~90000 столбцами штрих-кодов, которые я хочу отсортировать в определенном порядке.

    > str(pbmc.data)
Formal class 'dgTMatrix' [package "Matrix"] with 6 slots
  ..@ i       : int [1:95766843] 27 33 46 49 79 83 97 101 153 156 ...
  ..@ j       : int [1:95766843] 0 0 0 0 0 0 0 0 0 0 ...
  ..@ Dim     : int [1:2] 33694 90213
  ..@ Dimnames:List of 2
  .. ..$ : chr [1:33694] "RP11-34P13.3" "FAM138A" "OR4F5" "RP11-34P13.7" ...
  .. ..$ : chr [1:90213] "AAACCTGAGCGTCAAG-1" "AAACCTGAGTACCGGA-1" "AAACCTGCAGCTGCTG-1" "AAACCTGCATCACGAT-1" ...
  ..@ x       : num [1:95766843] 1 2 1 1 1 1 1 1 9 1 ...
  ..@ factors : list()
> print(pbmc.data)
33694 x 90213 sparse Matrix of class "dgTMatrix"
   [[ suppressing 40 column names ‘AAACCTGAGCGTCAAG-1’, ‘AAACCTGAGTACCGGA-1’, ‘AAACCTGCAGCTGCTG-1’ ... ]]
   [[ suppressing 40 column names ‘AAACCTGAGCGTCAAG-1’, ‘AAACCTGAGTACCGGA-1’, ‘AAACCTGCAGCTGCTG-1’ ... ]]

RP11-34P13.3  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ......
FAM138A       . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ......
OR4F5         . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ......
RP11-34P13.7  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ......
RP11-34P13.8  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ......
RP11-34P13.14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ......
RP11-34P13.9  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ......
FO538757.3    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ......
FO538757.2    . . . 1 . 1 1 . . 1 . . 1 . . . . . . . . . . . . . . . . . . . . . . . 1 . . . ......
AP006222.2    . . . . . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . ......
RP5-857K21.15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ......
RP4-669L17.2  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ......
RP4-669L17.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ......

У меня есть другая матрица, где первый столбец содержит отсортированный порядок штрих-кодов.

    > str(total)
    'data.frame':   90213 obs. of  2 variables:
     $ Barcode: Factor w/ 90213 levels "AAACCTGAGAACAACT-14",..: 28003 66741 68722 33 64254 232 340 6462 15 60 ...
     $ Cluster: int  2 2 2 3 3 5 5 5 6 6 ...
    > > print(total[,1])
       [1] CATTCGCCATGCCTAA-1 GTCTCGTCAATACGCT-1 GTTAAGCTCGTAGATC-1 AAACCTGAGTACCGGA-1
       [5] GTACTCCCAGATGGGT-1 AAACGGGCAGTCAGAG-1 AAACGGGTCGGACAAG-1 ACCGTAAGTCTTCGTC-1
       [9] AAACCTGAGCGTCAAG-1 AAACCTGCAGCTGCTG-1 AAAGATGCAGCTGTGC-1 AAAGATGGTGTGAATA-1
      [13] AAAGATGGTTGCGTTA-1 AAAGCAAAGAGGTACC-1 AAAGCAAAGTGGAGAA-1 AAAGCAACAAGTTCTG-1
      [17] AAAGCAAGTAGCGATG-1 AAAGCAAGTCATACTG-1 AAAGCAAGTCATGCCG-1 AAAGCAAGTCGGCACT-1
      [21] AAAGTAGCAAGACACG-1 AAAGTAGCAAGCCATT-1 AAAGTAGCACTGTCGG-1 AAAGTAGCATGCTGGC-1

Есть ли способ сортировки столбцов большой матрицы, используя порядок штрих-кодов в первых столбцах второй матрицы? Я просто хочу изменить порядок столбцов. Порядок строк и точек данных в матрице должен оставаться неизменным.

РЕДАКТИРОВАТЬ:

Я попробовал это, но это привело к вектору, и все имена строк и столбцов были потеряны. correct_order - это вектор, содержащий штрих-коды в том порядке, в котором я хочу их получить, который я получил из 1-го столбца.

sorted_pbmc <- pbmc.data[order(factor(pbmc.data[1,], levels=correct_order))]
> str(sorted_pbmc)
 num [1:90213] 0 0 0 0 0 0 0 0 0 0 ...

Есть ли способ отсортировать эту разреженную матрицу и сохранить имена строк и столбцов?

0 ответов

Другие вопросы по тегам