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:[EMAIL PROTECTED] > >Sent: Saturday, May 10, 2008 1:09 PM > >To: Messing, Solomon O. > >Cc: r-help@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@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 <[EMAIL PROTECTED]> UNIL DGM -- Csardi Gabor <[EMAIL PROTECTED]> UNIL DGM ______________________________________________ R-help@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.