[R] help matching observations for social network data

William Dunlap wdunlap at tibco.com
Wed Mar 21 05:50:24 CET 2012


Your data.frame is
  d <- data.frame(
     ego = c(1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 5, 6),
     alter = c(2, 3, 1, 4, 1, 2, 4, 6, 1, 3, 6, 4))
and you want to get
  e <- data.frame(
     ego = c(1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5, 6),
     alter2 = c(4, 2, 4, 6, 3, 1, 2, 1, 4, 1, 4, 2, 3, 1, 2, 4, 6, 4, 1))
Try using merge() and removing the entries where
ego and alter of alter are the same:
  f <- function(d) {
    tmp <- merge(d, d, by.x = "alter", by.y="ego")  # note this gives 'tmp' illegal duplicate column names
    tmp2 <- tmp[ tmp[,2] != tmp[,3], c(2,3)]
    colnames(tmp2)[2] <- "alter2"
    tmp2
  }

I think that f(d) and e contain the same set of rows, although
they are ordered differently.


Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of Holly Shakya
> Sent: Tuesday, March 20, 2012 9:15 PM
> To: r-help at r-project.org
> Subject: [R] help matching observations for social network data
> 
> Greetings R folks,
> 
> I am stuck on a problem that I suspect can be solved somewhat easily.
> 
> I have social network data stored in dyads as below, where the numbers representing
> ego and alter are identifiers, so that number 1 as an ego is the same person as number 1
> as an alter etc.
> 
> 
>       ego alter
> 1      1     2
> 2      1     3
> 3      2     1
> 4      2     4
> 5      3     1
> 6      3     2
> 7      3     4
> 8      3     6
> 9      4     1
> 10   5     3
> 11    5     6
> 12    6     4
> 
> What I would like to do is to create new dyads which match up the ego with the alter's
> alters as below (preferably removing dyads in which ego and alter2 are the same):
> 
>      ego alter2
> 1      1     4
> 2      1     2
> 3      1     4
> 4      1     6
> 5      2     3
> 6      2     1
> 7      3     2
> 8      3     1
> 9      3     4
> 10    3     1
> 11    3     4
> 12    4     2
> 13    4     3
> 14    5     1
> 15    5     2
> 16    5     4
> 17    5     6
> 18    5     4
> 19    6     1
> 
> 
> Any suggestions as to how to do this would be greatly appreciated.
> 
> Holly
> ______________________________________________
> 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.



More information about the R-help mailing list