2016-01-19 4 views
1

В настоящее время у меня есть матрица размером 479 x 729, и я бы хотел преобразовать эту матрицу в матрицу с тремя столбцами, так что первый столбец представляет собой запись строки исходной матрицы, второй столбец - это запись столбца исходной матрицы, а третий столбец - значение в столбце и строке.Преобразование матрицы amxn в матрицу * mx 3

Есть ли простой способ сделать это? Я просмотрел функцию reShape, но не понял, как применить это здесь. Мотивация для этого заключается в том, чтобы создать таблицу расстояний для элементов внутри матрицы, которая включает их местоположение.

+2

может вы вставляете данные образца? –

+2

Что вы уже пробовали? Где вы застряли? _Questions ищет помощь для отладки («почему этот код не работает?») Должен включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе_. Пожалуйста, eee: [Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). –

ответ

1

Там, наверное, лучше или более умный способ, но это, кажется, прямо вперед и достаточно быстро:

m <- matrix(rnorm(349191), 479, 729) 

row_num <- as.vector(row(m)) 
col_num <- as.vector(col(m)) 
val <- as.vector(m) 

new_m <- as.matrix(cbind(row_num, col_num, val)) 

dim(new_m) 
# [1] 349191  3 

head(new_m) 
#  row_num col_num   val 
# [1,]  1  1 1.0839690124 
# [2,]  2  1 0.7363313818 
# [3,]  3  1 0.0001195304 
# [4,]  4  1 0.2123100877 
# [5,]  5  1 0.1293427830 
# [6,]  6  1 1.1773676868 

tail(new_m) 
#   row_num col_num   val 
# [349186,]  474  729 -0.07942063 
# [349187,]  475  729 -0.25694755 
# [349188,]  476  729 -0.69421258 
# [349189,]  477  729 1.24861689 
# [349190,]  478  729 0.24377606 
# [349191,]  479  729 0.49150676 
+0

Это работает - забыли про 'as.vector' – TimColeman

1

Вы можете использовать:

library(reshape2) 
melt(M) 

где M ваша матрица

+0

Эта функция, похоже, не является частью ванильного распределения R (по крайней мере, это не в 3.2.3). На какой пакет вы собираетесь ссылаться? –

+0

@Glen_b, хорошая точка. –

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