2013-02-23 2 views
3

У меня возникли проблемы с загрузкой моего набора данных в разреженную матрицу в R. Я использую пакет Matrix. Данные у меня есть в форме x y value. Например:R координатно-парные пары в разреженной матрице

V1 V2 V3 
    1 2 .34 
    7 4 .56 
    4 5 .62 

, где я хотел бы сделать эквивалент

myMatrix[1,2] = .34 
myMatrix[7,4] = .56 
myMatrix[4,5] = .62 

автоматизированным способом.

Я хочу сделать что-то вроде:

myMatrix = Matrix(nrow=numrows, ncol=numcols) 
myMatrix[mydata[1:numrows, 1], mydata[1:numrows, 2]] <- mydata[1:numrows, 3] 

, но это делает мою сплошную матрицу lgeMatrix, когда мне нужно числовой матрицы.

Я также попытался:

myMatrix = Matrix(nrow=numrows, ncol=numcols) 
for(i in 1:numrows){ 
    myMatrix[mydata[i, 1], mydata[i, 2]] <- mydata[i, 3] 
} 

который создает вид матрицы Я хочу, но это занимает слишком много времени (более 5 минут). Я знаю, что это работает, потому что, когда я его останавливаю, я проверяю первые несколько значений, и они верны, но последние значения - NA. Я работаю с матрицей 7095 на 5896 с значениями 247158, чтобы войти, поэтому цикл for не может быть и речи, если только я не буду нетерпеливым.

Мой вопрос: каков предпочтительный способ сделать это в R?

обновление:

Я понял это с помощью sparseMatrix вместо:

myMatrix = sparseMatrix(i = mydata[1:numrows,1], j = mydata[1:numrows,2], 
        x = mydata[1:numrows,3]) 

не поняло sparseMatrix использования в других post

+3

Означает ли это, что ответь свой вопрос? http://stackoverflow.com/questions/1274171/creating-and-accessing-a-sparse-matrix-in-r То есть, попробуйте 'library (Matrix)' then 'myMatrix <- sparseMatrix (V1, V2, x = V3) ' –

+0

Один из способов включен в этот более общий ответ: http://stackoverflow.com/a/9617424/210673 – Aaron

ответ

4

Давайте предположим, что это dataframe назвала Даты:

myMatrix = Matrix(0, nrow=10, ncol=10) 
# Notice that you need to specify zero values to make it sparse. 
myMatrix[cbind(dat$V1, dat$V2)] <- dat$V3 
myMatrix 
#-------------- 
10 x 10 sparse Matrix of class "dgCMatrix" 

[1,] . 0.34 . . . . . . . . 
[2,] . . . . . . . . . . 
[3,] . . . . . . . . . . 
[4,] . . . . 0.62 . . . . . 
[5,] . . . . . . . . . . 
[6,] . . . . . . . . . . 
[7,] . . . 0.56 . . . . . . 
[8,] . . . . . . . . . . 
[9,] . . . . . . . . . . 
[10,] . . . . . . . . . . 
+0

Спасибо! Это решило мою проблему! –

Смежные вопросы