R: переставить матрицу в три столбца - PullRequest
4 голосов
/ 28 марта 2012

У меня есть матрица в R. Каждая запись i, j является счетом, а имена строк и столбцов - идентификаторами.

Вместо матрицы я просто хочу матрицу из 3 столбцов, которая имеет: i, j, score

Сейчас я использую вложенные циклы. Как:

for(i in rownames(g))
    {
        print(which(rownames(g)==i))
        for(j in colnames(g))
        {
            cur.vector<-c(cur.ref, i, j, g[rownames(g) %in% i,colnames(g) %in% j])
            rbind(new.file,cur.vector)->new.file
        }

    }

Но это очень неэффективно, я думаю ... Я уверен, что есть лучший способ, которым я просто недостаточно хорош с R. Мысли? * * 1013

Ответы [ 2 ]

7 голосов
/ 28 марта 2012

Если вы преобразуете свою матрицу сначала в таблицу (с as.table), а затем во фрейм данных (as.data.frame), тогда она выполнит то, что вы просите.Простой пример:

> tmp <- matrix( 1:12, 3 )
> dimnames(tmp) <- list( letters[1:3], LETTERS[4:7] )
> as.data.frame( as.table( tmp ) )
   Var1 Var2 Freq
1     a    D    1
2     b    D    2
3     c    D    3
4     a    E    4
5     b    E    5
6     c    E    6
7     a    F    7
8     b    F    8
9     c    F    9
10    a    G   10
11    b    G   11
12    c    G   12
6 голосов
/ 28 марта 2012

Если я вас правильно понимаю, вам нужно сгладить матрицу.
Вы можете использовать as.vector и rep, чтобы добавить столбцы идентификаторов, например:

m = cbind(c(1,2,3),c(4,5,6),c(7,8,9))
row.names(m) = c('R1','R2','R3')
colnames(m) = c('C1','C2','C3')

d <- data.frame(i=rep(row.names(m),ncol(m)),
                j=rep(colnames(m),each=nrow(m)),
                score=as.vector(m))

Результат:

> m
   C1 C2 C3
R1  1  4  7
R2  2  5  8
R3  3  6  9

> d
   i  j score
1 R1 C1     1
2 R2 C1     2
3 R3 C1     3
4 R1 C2     4
5 R2 C2     5
6 R3 C2     6
7 R1 C3     7
8 R2 C3     8
9 R3 C3     9

Обратите внимание, что этот код преобразует матрицу в data.frame, поскольку имена строк и столбцов могут быть строковыми, и у вас не может быть матрицы с другим типом столбца.
Если вы уверенычто все имена строк и столбцов являются числами, вы можете привести его к матрице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...