Преобразование матрицы смежности в таблицу с двумя столбцами в r

У меня следующая матрица смежности. Я хочу скрыть его в таблице из двух столбцов в R. Воспроизводимый пример включает:

            Village_A   Village_B   Village_C   Village_D   Village_E
Village_A   438          507         157         166         832
Village_B   285          887         116         758         244
Village_C   935          459         217         561         550
Village_D   151          606         202         869         169
Village_E   572          362         416         899         510

Я хочу скрыть его в таблице с двумя столбцами как:

Village_A   Village_A   438
Village_B   Village_A   285
Village_C   Village_A   935
Village_D   Village_A   151
Village_E   Village_A   572
Village_A   Village_B   507
Village_B   Village_B   887
Village_C   Village_B   459
Village_D   Village_B   606
Village_E   Village_B   362
Village_A   Village_C   157
Village_B   Village_C   116
Village_C   Village_C   217
Village_D   Village_C   202
Village_E   Village_C   416
Village_A   Village_D   166
Village_B   Village_D   758
Village_C   Village_D   561
Village_D   Village_D   869
Village_E   Village_D   899
Village_A   Village_E   832
Village_B   Village_E   244
Village_C   Village_E   550
Village_D   Village_E   169
Village_E   Village_E   510

Не могли бы вы поделиться dput (df), где df - ваш фрейм данных?

rar 26.10.2018 07:41

Если это matrix, используйте reshape2::melt(df)) или конвертируйте data.frame в matrix и используйте melt, то есть melt(as.data.frame(df)).

akrun 26.10.2018 07:54

Не удалось создать желаемую таблицу. Он дал только одну колонну района. Мне нужны две колонки округа.

NoviceStat 26.10.2018 08:04

Взгляните на функцию gather из tidyr, вы хотите сделать что-то вроде gather(df, "Village_A", "Village_B", "Village_C", "Village_D", "Village_E", key = "village_2", value = "value")

Linards Kalvans 26.10.2018 08:44
0
4
697
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
#temptable.txt:
##Village_A   Village_B   Village_C   Village_D   Village_E
##Village_A   438          507         157         166         832
##Village_B   285          887         116         758         244
##Village_C   935          459         217         561         550
##Village_D   151          606         202         869         169
##Village_E   572          362         416         899         510
data <- read.delim("temptable.txt",sep="")
crossdata <- lapply(rownames(data),function(x)sapply(colnames(data),function(y)list(x,y,data[x,y])))
crossdatatmp <- matrix(unlist(crossdata),nrow=3)
crossdatamat <- t(crossdatatmp)
colnames(crossdatamat) <- c("From","To","Value")
crossdatadf <- as.data.frame(crossdatamat,stringsAsFactors=F)
crossdatadf[,3] <- as.numeric(crossdatadf[,3])
crossdatadf
##        From        To Value
##1  Village_A Village_A   438
##2  Village_A Village_B   507
##3  Village_A Village_C   157
##4  Village_A Village_D   166
##5  Village_A Village_E   832
## ...

Я получил эту ошибку: неожиданный символ в "crossdatatmp <- t (crossdatatmp) atatmp"

NoviceStat 26.10.2018 08:36

@NoviceStat отредактировал.

SRhm 26.10.2018 08:37

Спасибо за помощь @SRhm

NoviceStat 26.10.2018 12:04

Спасибо @SRhm за быструю помощь

NoviceStat 08.11.2018 16:02

Взгляните на функцию gather из tidyr. Вы хотите сделать что-то вроде (при условии, что df - это имя вашего фрейма данных):

gather(df, "Village_A", "Village_B", "Village_C", "Village_D", "Village_E", key = "village_2", value = "value")

Другие вопросы по теме