File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import DataFrames. DataFrame
2+
3+ """
4+ DataFrame(gr::T; type = :node) where T <:AbstractMetaGraph
5+
6+ Construct a DataFrame from a MetaGraph from either its node or edge properties.
7+ """
8+ function DataFrame (gr:: T ; type = :node ) where T <: AbstractMetaGraph
9+ fl, prps, en, nu = if type == :node
10+ :node => Int[], gr. vprops, vertices, nv
11+ elseif type == :edge
12+ :edge => Edge[], gr. eprops, edges, ne
13+ else
14+ error (" specify :node or :edge" )
15+ end
16+
17+ dx = DataFrame (fl)
18+
19+ x = unique (reduce (vcat, values (prps)))
20+ for y in x
21+ for (k, v) in y
22+ dx[! , k] = typeof (v)[] # may be a problem if type is not consistent in y?
23+ allowmissing! (dx, k)
24+ end
25+ end
26+
27+ dx = similar (dx, nu (gr))
28+
29+ for (i, e) in (enumerate∘ en)(gr)
30+ dx[i, type] = e
31+ pr = props (gr, e)
32+ for (nme, val) in pr
33+ dx[i, nme] = val
34+ end
35+ end
36+
37+ # remove missing when possible
38+ for v in Symbol .(names (dx))
39+ if ! any (ismissing .(dx[! , v]))
40+ disallowmissing! (dx, v)
41+ end
42+ end
43+ return dx
44+ end
You can’t perform that action at this time.
0 commit comments