В моей базе данных представлены проекты с участием отдельных лиц, которые принимали в ней участие, а также год, в который были осуществлены проекты.Создание реляционных матриц с R
Как я могу создать для каждого года реляционную матрицу nxn (n - количество индивидуумов), которая учитывает количество взаимодействий между отдельными лицами.
Рассмотрим следующий пример, который воспроизводит желаемую структуру:
# Example dataframe
set.seed(1)
tp=cbind(paste(rep("project",10),1:10,sep=""),sample(2005:2010,10,replace=T))
tp=tp[sample(1:10,50,T),]
id=sample(paste(rep("id",10),1:10,sep=""),50,T)
df=as.data.frame(cbind(tp,id));rm(tp,id)
names(df)=c("project","year","id")
df=df[order(df$project,df$id),]
df[1:10,]
# project year id
# project1 2006 id1
# project1 2006 id3
# project1 2006 id5
# project1 2006 id5
# project4 2006 id3
# project4 2006 id4
# project5 2006 id3
# project5 2006 id4
# project6 2008 id2
# project6 2008 id3
В качестве примера, реляционная матрица на 2006 год будет выглядеть следующим образом
id1 id2 id3 id4 id5
id1 0 0 1 0 1
id2 0 0 0 0 0
id3 1 0 0 2 1
id4 0 0 2 0 0
id5 1 0 1 0 0
# link between 1 and 3, 1 and 5, 3 and 5 on project 1
# links between 3 and 4 on project 4 and project 5
# the matrix is symmetric
# the diagonal is O because an individual cannot collaborate with himself
Я применил вашу функцию для каждого года набора данных, но не дает нужной релятивной матрицы nxn 'spl = split (df, df $ year); net = lapply (spl, function (x) {reshape2 :: acast (х, проект ~ идентификатор, value.var = "идентификатор")}); net' – goclem