Сортировка столбцов разреженной матрицы в определенном порядке 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 ...
Есть ли способ отсортировать эту разреженную матрицу и сохранить имена строк и столбцов?