Add one or more vertex attributes to a graph
add_vertex_attributes(x, attr_name = NULL, value)
graph object with new attributes added
Consistent API to easily add one or more vertex attributes to a graph of
class igraph
or network
. Both the igraph
and statnet
packages do not have (simple) functions for this.
Adding vertex attributes is easy, There are several options:
a vector with values specified in value
and a name for the
attribute specified in attr_name
.
a data.frame
for the value
. All columns in the data.frame
will be added to the graph as vertex attributes and the names in the
data.frame
are used as the names of
the new attributes,
a matrix
for the value
. The matrix needs to have appropriate
column names. All columns in the matrix
will be added to the graph as
vertex attributes and the column names in the matrix
are used as the names of
the new attributes,
a data.frame
or matrix
(with column names) AND a character
vector with variable names in attr_name
. The variables with the names
specified in the attr_name
argument will be taken from the data.frame
or matrix
and will be added to the graph as vertex attributes.
This is useful in case you have a larger data.frame
of which you only
want to add some of the columns as vertex attributes.
In all cases, the attributes will be added for all vertices, so you need to make sure the values in the correct order and exist for all of the vertices.
g <- igraph::graph.ring(5)
#> Registered S3 methods overwritten by 'igraph':
#> method from
#> plot.igraph snafun
#> print.igraph snafun
add_vertex_attributes(g, "at1", 1:5) |>
igraph::vertex_attr("at1")
#> [1] 1 2 3 4 5
add_vertex_attributes(g, value = data.frame(naam = 1:5)) |>
igraph::vertex_attr("naam")
#> [1] 1 2 3 4 5
add_vertex_attributes(g, value = data.frame(een = 11:15, twee = 21:25))
#> IGRAPH c433991 U--- 5 5 -- Ring graph
#> + attr: name (g/c), mutual (g/l), circular (g/l), een (v/n), twee (v/n)
#> + edges from c433991:
#> [1] 1--2 2--3 3--4 4--5 1--5
add_vertex_attributes(g, c("twee", "een"),
value = data.frame(een = 11:15, twee = 21:25, drie = 31:35))
#> IGRAPH c433991 U--- 5 5 -- Ring graph
#> + attr: name (g/c), mutual (g/l), circular (g/l), twee (v/n), een (v/n)
#> + edges from c433991:
#> [1] 1--2 2--3 3--4 4--5 1--5
g <- sna::rgraph(10, tprob = .2) |> network::as.network()
#> Registered S3 methods overwritten by 'network':
#> method from
#> plot.network snafun
#> print.network snafun
add_vertex_attributes(g, "naam", value = data.frame(naam = 1:10))
#> Network attributes:
#> vertices = 10
#> directed = TRUE
#> hyper = FALSE
#> loops = FALSE
#> multiple = FALSE
#> bipartite = FALSE
#> total edges= 17
#> missing edges= 0
#> non-missing edges= 17
#>
#> Vertex attribute names:
#> naam vertex.names
#>
#> No edge attributes
add_vertex_attributes(g, value = data.frame(naam = 1:10))
#> Network attributes:
#> vertices = 10
#> directed = TRUE
#> hyper = FALSE
#> loops = FALSE
#> multiple = FALSE
#> bipartite = FALSE
#> total edges= 17
#> missing edges= 0
#> non-missing edges= 17
#>
#> Vertex attribute names:
#> naam vertex.names
#>
#> No edge attributes
add_vertex_attributes(g, value = data.frame(een = 10:19, twee = 20:29))
#> Network attributes:
#> vertices = 10
#> directed = TRUE
#> hyper = FALSE
#> loops = FALSE
#> multiple = FALSE
#> bipartite = FALSE
#> total edges= 17
#> missing edges= 0
#> non-missing edges= 17
#>
#> Vertex attribute names:
#> een twee vertex.names
#>
#> No edge attributes
add_vertex_attributes(g, c("twee", "een"),
value = data.frame(een = 10:19, twee = 20:29, drie = 30:39))
#> Network attributes:
#> vertices = 10
#> directed = TRUE
#> hyper = FALSE
#> loops = FALSE
#> multiple = FALSE
#> bipartite = FALSE
#> total edges= 17
#> missing edges= 0
#> non-missing edges= 17
#>
#> Vertex attribute names:
#> een twee vertex.names
#>
#> No edge attributes