0

我想创建一个网络矩阵列表,按项目拆分。我的数据结构是这样的。

Project Person_i  Person_j   Value
1       A         B          6
1       B         A          6
2       A         B          4
2       A         C          5
2       B         A          4
2       B         C          9
2       C         A          5
2       C         B          9

我知道如何拆分数据,以及如何创建二进制边列表。但是,我只是不知道如何使用有价值的数据创建矩阵。

具体来说,我希望我的数据看起来像这样

清单 1 美元:

  A B
A 0 6
B 6 0

清单 2 美元:

  A B C
A 0 4 5
B 4 0 9
C 5 9 0
4

1 回答 1

1

您可以在 base 中尝试R

#just in case the columns are factors
df[,2:3]<-lapply(df[,2:3],as.character)
f<-function(x) {
  pers<-unique(unlist(x[,2:3]))
  res<-matrix(0,length(pers),length(pers),dimnames=list(pers,pers))
  res[as.matrix(x[,2:3])]<-x[,4]
  res
}
lapply(split(df,df$Project),f)
#$`1`
#   A B
# A 0 6
# B 6 0
#$`2`
#  A B C
#A 0 4 5
#B 4 0 9
#C 5 9 0

有了reshape2它更容易:

require(reshape2)
lapply(split(df,df$Project),
       function(x) acast(x,Person_i ~ Person_j,value.var="Value",fill=0))
于 2016-03-22T20:19:23.213 回答