2016-11-08 2 views
2

мне было интересно, можно создать что-то вроде диаграммы дерева с использованием импортированных данных таблицы (UTF-8 кодировка) примерно так:Как создать дерево граф в R

col0 col1    col2  col3 col4 
name <NA>    <NA>  <NA>  NA 
name dog, cat, bird dog  Canis  3 
name dog, cat, bird cat  Feline 3 
name dog, cat, bird bird  Avis  4 

Я пытаюсь использовать этот образец кода:

library(rpart) 
raw = subset(dataset, select=c("col1","col2","col3")) 
formula = col1 ~ col3 
fit = rpart(formula, method="class", data=raw) 

Но я получаю сообщение об ошибке, как: «число строк матриц должны совпадать» или в других случаях это всплывающее: «ошибка: неожиданный„>“в«>»

В конце I» m попытаться получить диаграмму, которая больше или менее как на картинке ниже: enter image description here

ответ

1

Вы можете использовать пакет Diagrammer дать вам изображение, как это:

enter image description here

dataset <- data.frame(
    col0="name", 
    col1=c(NA, "dog, cat, bird", "dog, cat, bird", "dog, cat, bird"), 
    col2=c(NA, "dog", "cat", "bird"), 
    col3=c(NA, "Canis", "Feline", "Avis"), 
    col4=c(NA, 3, 3, 4), 
    stringsAsFactors=FALSE) 

# remove rows with missing values 
sub <- dataset[!is.na(dataset$col1), ] 

uniquenodes <- unique(c(sub$col1, sub$col3)) 

library(DiagrammeR) 

nodes <- create_nodes(nodes=seq(uniquenodes), type="number", label=uniquenodes) 

edges <- create_edges(from=match(sub$col1, uniquenodes), 
    to=match(sub$col3, uniquenodes), rel="related") 

g <- create_graph(nodes_df=nodes, edges_df=edges) 

render_graph(g) 
1

С igraph:

df <- df[df$col1 != '<NA>',] 
species <- union(df$col1, df$col3) 
df <- df[c('col1', 'col3')] 
names(df) <- c('from', 'to') 
g <- graph.data.frame(df, directed = TRUE, vertices = species) 
plot(g,vertex.size=95, vertex.label.dist=0.5, vertex.color="green", 
    edge.arrow.size=0.5, layout=layout.reingold.tilford(g, root='dog,cat,bird')) 

enter image description here

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