1

I have a data frame that's an edgelist (undirected) describing who is tied to who, and then a data frame with those actors' ethnicity. I want to get a data frame that lists the name of each ego in one column and the sum of their alters of a given type of ethnicity on the other (ex. Joe and the number of his white friends). Here's what I tried:

atts <- data.frame(Actor = letters[1:10], Ethnicity = sample(1:3, 10, replace=T)) # sample ethnicity data
df <- data.frame(actorA = letters[1:10],actorB=c("h","d","f","i","g","b","a","a","e","h")) # sample edgelist

df.split<-split(df$actorB,df$actorA) # obtain list of alters for column 1
head(df.split)

friends <- c()
n<-length(df.split)
for (i in 1:n){
  alters_e <-atts[atts$Actor %in% df.split[[i]]==TRUE,] # get ethnicity for alters
  friends[i] <- sum(alters_e$Ethnicity==3) # compute no. ties for one ethnicity value
} 
friends

The problem with this is that using the split function doesn't work if some of your egos only show up in the actorB column.

Can anybody recommend a more graceful way for me to obtain lists of alters by ego's ID, that isn't the split function?

Audrey
  • 99
  • 7

1 Answers1

0

I hope this helps:

(atts <- data.frame(Actor = letters[1:10], Ethnicity = sample(1:3, 10, replace=T))) 
(df <- data.frame(alter = letters[1:10],ego=c("h","d","f","i","g","b","a","a","e","h"))) 

(Merged <- merge (df, atts, by.x="alter", by.y="Actor"))
with(Merged, table(ego,Ethnicity)) 

,David

David.
  • 132
  • 6