2017-09-19 1 views
2

J'ai des données qui contiennent un certain nombre d'identifiants différents et une liste de leurs états à des moments différents (t1, t2, t3 etc) et je voudrais générer un tableau qui donne des informations sur les différents types d'états changer ce qui se passe, donc quelque chose qui ressemblerait à ceci pour les données de l'échantillon (copié ci-dessous).Comment puis-je produire une table de types de transition dans R?

x y z 
x 0 2 0 
y 1 2 1 
z 1 0 2 

qui montrerait, par exemple, que x changé en y deux fois et y changé pour x une fois. Est-ce que quelqu'un sait comment je pourrais être en mesure de le faire dans R?

DONNÉES EXEMPLE:

id <- c('a','b','c') 
t1 <- c('x','y','z') 
t2 <- c('y','y','z') 
t3 <- c('z','y','x') 
t4 <- c('z','x','y') 
df <- cbind(id, t1, t2, t3, t4) 

Répondre

5

Une façon vous pouvez faire est à l'aide igraph. Le bit légèrement délicat est l'obtenir dans un format graphique, mais après cela est fait la matrice d'adjacence peut être extraite.

# Split matrix so that each row is a `path` 
lst <- split(df[,-1], 1:nrow(df)) 
unique_nodes <- unique(c(df[,-1])) 

library(igraph) 

# Create empty graph and name nodes 
g <- make_empty_graph(n=length(unique_nodes)) 
V(g)$name <- unique_nodes 

# Read in each path 
for (i in lst) { 
    g <- g + path(i) 
} 

# Output adjacency matrix 
as_adj(g, sparse=FALSE) 
# x y z 
#x 0 2 0 
#y 1 2 1 
#z 1 0 2