2010-08-04 19 views
7

Tengo un archivo delimitado por tabulador comodelimitado por tabuladores a la Plaza Matriz

A B 0.5 
A C 0.75 
B D 0.2 

Y quiero convertirlo en una matriz cuadrada, como

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

¿Cómo se puede ir sobre ella en R? Gracias,

Respuesta

7

Si usted tiene los datos en una trama de datos con los siguientes nombres de columna:

Var1 Var2 value 

que es posible utilizar

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

Ver el paquete plyr para algunos datos más generales remodelación de funciones además.

+0

funcionó como un encanto. Muchas gracias – y2p

3

Otro enfoque (no tan elegante como JoFrhwld de)

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 
> 
0

supongo esto es una matriz de adyacencia ponderada para un gráfico. De ser así, podría interesarle el paquete igraph, para leer los datos como una lista de bordes ponderados.

Cuestiones relacionadas