[R] For Social Network Analysis-Graph Analysis - How to convert 2 mode data to 1 mode data?

Gabor Csardi csardi at rmki.kfki.hu
Wed May 14 09:59:08 CEST 2008


Hi Solomon,

On Tue, May 13, 2008 at 05:53:44PM -0400, Messing, Solomon O. wrote:
> Hi Gabor,
> 
> Thank you for your help, and thanks for making the excellent igraph
> package.  The function below seems not generate an edge list that works
> for my data.  I coerced a my data from a data frame using
> graph.data.frame.  
> 
> You asked in your previous post if 2-mode networks are bipartite.  I
> believe the answer is yes.  However, in 
> 
> Hanneman, Robert A. and Mark Riddle.  2005.  Introduction to social
> network methods.  Riverside, CA:  University of California, Riverside (
> published in digital form at http://faculty.ucr.edu/~hanneman/ )
> 
> I found the following: 
> 
> "Two-mode data are sometimes stored in a second way, called the
> "bipartite" matrix.  A bipartite matrix is formed by adding the rows as
> additional columns, and columns as additional rows."
> 
> Did I need to convert my data frame to a bipartite matrix before
> applying the two.to.one function?

No. The function i've sent assumes that your network is bipartite, i.e. 
if A and B are connected by an edge, then they're assumed to be 
different types of nodes. Just create the graph, calculate the 'keep'
parameter, I assume that you know this from external information, and 
then call the function.

G.

> Solomon
> 
> 
> >-----Original Message-----
> >From: Gabor Csardi [mailto:csardi at rmki.kfki.hu]
> >Sent: Saturday, May 10, 2008 1:09 PM
> >To: Messing, Solomon O.
> >Cc: r-help at r-project.org
> >Subject: Re: [R] For Social Network Analysis-Graph Analysis - How to
> convert 2
> >mode data to 1 mode data?
> >
> >Solomon, if i understand two-mode networks properly (they're bipartite,
> >right?),
> >then this is not hard to do with igraph. Basically, for each vertex
> create an
> >order=2 neighborhood, and then create a graph from the adjacency list,
> >it is something like this:
> >
> >two.to.one <- function(g, keep) {
> >  neis <- neighborhood(g, order=2)
> >  neis <- lapply(seq(neis), function(x) neis[[x]][ neis[[x]] != x-1])
> ## drop
> >self-loops
> >  neis <- lapply(neis, function(x) x[ x %in% keep ])
> ## keep
> >only these
> >  neis <- lapply(seq(neis), function(x) t(cbind(x-1, neis[[x]])))
> ## create
> >edge lists
> >  neis[-keep-1] <- NULL
> ## these
> >are not needed
> >  neis <- matrix(unlist(neis), byrow=TRUE, nc=2)
> ## a
> >single edge list
> >  neis <- neis[ neis[,1] > neis[,2], ]
> ## count
> >an edge once only
> >  mode(neis) <- "character"
> >  g2 <- graph.edgelist(neis, dir=FALSE)
> >  V(g2)$id <- V(g2)$name
> ## 'id'
> >is used in Pajek
> >  g2
> >}
> >
> >It does not check that the graph is indeed two-mode, and it keeps the
> >vertices given in the 'keep' argument. 'keep' is made of igraph vertex
> ids.
> >You can use it like this:
> >
> >g <- graph.ring(10)
> >keep <- seq(0,8,by=2) ## we keep the 'even' vertices
> >
> >g2 <- two.to.one(g, keep)
> >write.graph(two.to.one(g, keep), format="pajek", file="/tmp/a.net")
> >
> >I haven't tested it much. We'll have a better function in the next
> igraph
> >version.
> >Gabor
> >
> >On Fri, May 09, 2008 at 03:37:05PM -0400, Messing, Solomon O. wrote:
> >> Hi,
> >>
> >>
> >>
> >> Does anyone know of a package in R that has a function to convert
> >> network data (e.g. an adjacency matrix or ) from 2-mode to 1-mode?  I
> am
> >> conducting social network analysis.  I know that Pajek has this
> function
> >> under Net --> Transform --> 2-mode to 1-mode --> Rows.  I have
> searched
> >> the documentation under packages 'sna', 'network', 'igraph', and
> >> 'dynamicgraph' but I was not able to identify a comparable function.
> >>
> >>
> >>
> >> I would just export my data to Pajek and import it to R, but I'm
> going
> >> to have to generate hundreds of these graphs, so it would take quite
> a
> >> bit of time to do it this way.
> >>
> >>
> >>
> >> Thanks,
> >>
> >>
> >>
> >> Solomon
> >>
> >>
> >>
> >>
> >> 	[[alternative HTML version deleted]]
> >>
> >> ______________________________________________
> >> R-help at r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-help
> >> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> >> and provide commented, minimal, self-contained, reproducible code.
> >
> >--
> >Csardi Gabor <csardi at rmki.kfki.hu>    UNIL DGM

-- 
Csardi Gabor <csardi at rmki.kfki.hu>    UNIL DGM



More information about the R-help mailing list