Skip to content

Commit d5ad906

Browse files
authored
Create DataFrame.jl
dataframe from metagraph
1 parent dbb5880 commit d5ad906

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

src/DataFrame.jl

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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 (enumerateen)(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

0 commit comments

Comments
 (0)