Вкладка, разграниченная к квадратной матрице

У меня есть файл с разделением табуляцией как

A   B   0.5
A   C   0.75
B   D   0.2

И я хочу преобразовать его в квадратную матрицу, как

       A      B      C       D
A      0     0.5    0.75     0
B             0      0      0.2 
C                    0       0
D                            0

Как я могу пойти об этом в R?Спасибо,

7
задан y2p 4 August 2010 в 04:48
поделиться

3 ответа

Если у вас есть данные во фрейме данных со следующими именами столбцов:

Var1    Var2    value

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

xtabs(value ~ Var1 + Var2, data = df)

См. Пакет plyr для более общего изменения формы данных функции также.

7
ответ дан 7 December 2019 в 01:15
поделиться

Другой подход (не такой элегантный, как у JoFrhwld)

df<- read.table(textConnection("
Var1    Var2    value
A   B   0.5
A   C   0.75
B   D   0.2
"),header = T)


lev = unique(c(levels(df$Var1),levels(df$Var2)))
A = matrix(rep(0,length(lev)^2),nrow=length(lev))
colnames(A) = lev
rownames(A) = lev
apply(df,1,function(x) A[x[1],x[2]]<<-as.numeric(x[3]))

> A
  A   B    C   D
A 0 0.5 0.75 0.0
B 0 0.0 0.00 0.2
C 0 0.0 0.00 0.0
D 0 0.0 0.00 0.0
> 
3
ответ дан 7 December 2019 в 01:15
поделиться

Я предполагаю, что это взвешенная матрица смежности для графа. В таком случае вас может заинтересовать пакет igraph для чтения данных в виде списка взвешенных ребер.

0
ответ дан 7 December 2019 в 01:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: