igraph-help
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [igraph] creating a graph from special piece of data


From: Gábor Csárdi
Subject: Re: [igraph] creating a graph from special piece of data
Date: Fri, 24 Aug 2012 14:26:58 -0400

Hi,

in reality you have a bipartite (or two-mode) network, because you
have two vertex types: actors and projects, and connections are
possible only between actors and projects.

So you can create a two-mode network first, and then project it into
two one-mode networks: the network of projects and the network of
actors. You are interested in the latter, where two actors are
connected if they have at least one common project.

Here is some example code, you can start with this:

tab <- read.csv(textConnection(
"Actor,Project,Type,Country
Miller Inc.,A1,Company,Canada
Bremen University,B6,University,Germany
Tokyo University,A1,University,Japan
Schulze GmbH,B2,Company,Germany
Miller Inc.,B2,Company,Canada
School authority London,B6,Authority,England
Meier AG,A1,Company,Austria
Meier AG,P7,Company,Austria
Athens University,K6,University,Greece
"))

## First collect the vertices and the vertex attributes
vertices1 <- tab[,c(1,3,4)]
vertices1 <- vertices1[!duplicated(vertices1[,1]),]

vertices2 <- data.frame(Actor=tab[,2], Type=NA, Country=NA)
vertices2 <- vertices2[!duplicated(vertices2[,1]),]

vertices <- rbind(vertices1, vertices2)

## The edges are simply defined by the first two columns
edges <- tab[,c(1,2)]

G <- graph.data.frame(edges, vertices=vertices, directed=FALSE)

## To make this an igraph bipartite graph, it needs a 'type' vertex attribute
V(G)$type <- V(G)$name %in% tab$Project

## This looks good
str(G, v=T, e=T)

## Create the projection
proj <- bipartite.projection(G)[[1]]

## The network of actors
str(proj, v=T, e=T)

Best,
Gabor

On Fri, Aug 24, 2012 at 7:49 AM, Dominik Santner (CRIE)
<address@hidden> wrote:
> Hello,
>
> I just started working with igraph in R, so I'm a kind of newbie. Maybe my
> problem is easy to solve, but I don't know how.
>
> I want to create a graph from a piece of data. I just found on the internet
> information on how to create graphs from edge lists or adjacency matrices
> and how to add the attribute information from a separated list.
> Unfortunately my data are different. A simplified fictitious example is
> shown here:
>
> Actor        Project    Type        Country
> Miller Inc.        A1    Company        Canada
> Bremen University    B6    University    Germany
> Tokyo University    A1    University    Japan
> Schulze GmbH        B2    Company        Germany
> Miller Inc.        B2    Company        Canada
> School authority London    B6    Authority    England
> Meier AG        A1    Company        Austria
> Meier AG        P7    Company        Austria
> Athens University    K6    University    Greece
>
>
> I want to receive a graph with edges indicating that actors work together in
> the same project (e.g. Miller Inc. and Tokyo University working together in
> project A1). Some actors are listed repeatedly (Miller Inc.) and some
> projects are run by only one actor (P7 by Meier AG). Some actors don't have
> any project partners at all (Athens University). Attribute data (type,
> country) are already included in this data frame.
>
> How can I get an igraph graph from this kind of data including edge
> information and attribute data?
>
> Thanks a lot in advance!
> Dominik
>
> _______________________________________________
> igraph-help mailing list
> address@hidden
> https://lists.nongnu.org/mailman/listinfo/igraph-help



-- 
Gabor Csardi <address@hidden>     MTA KFKI RMKI



reply via email to

[Prev in Thread] Current Thread [Next in Thread]