У меня есть разреженная матрица представлена в видеКак преобразовать эту разреженную матрицу в обычную?
> (f <- data.frame(row=c(1,2,3,1,2,1,2,3,4,1,1,2),value=1:12))
row value
1 1 1
2 2 2
3 3 3
4 1 4
5 2 5
6 1 6
7 2 7
8 3 8
9 4 9
10 1 10
11 1 11
12 2 12
Здесь первый столбец всегда присутствует (на самом деле, первые немногие из них присутствуют, остальные не являются).
Я хочу, чтобы получить данные в формате матрицы:
> t(matrix(c(1,2,3,NA,4,5,NA,NA,6,7,8,9,10,NA,NA,NA,11,12,NA,NA),nrow=4,ncol=5))
[,1] [,2] [,3] [,4]
[1,] 1 2 3 NA
[2,] 4 5 NA NA
[3,] 6 7 8 9
[4,] 10 NA NA NA
[5,] 11 12 NA NA
Вот что, кажется, работает:
> library(Matrix)
> as.matrix(sparseMatrix(i = cumsum(f[[1]] == 1), j=f[[1]], x=f[[2]]))
[,1] [,2] [,3] [,4]
[1,] 1 2 3 0
[2,] 4 5 0 0
[3,] 6 7 8 9
[4,] 10 0 0 0
[5,] 11 12 0 0
Кроме того, что я должен заменить 0
с NA
себя.
Есть ли лучшее решение?
Ничего страшного. Я только ставил под вопрос использование 'as.matrix' и' NA'. Если вы действительно работаете с большой разреженной матрицей, вы должны остановиться на 'sparseMatrix'. – flodel
@flodel: он невелик и это не матрица. Я использую 'sparseMatrix' для синтаксического анализа. – sds