r:创建网络矩阵列表
r : create list of network matrices
我想创建一个网络矩阵列表,按 项目 拆分。我的数据结构如下。
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
你可以尝试在基地 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))
我想创建一个网络矩阵列表,按 项目 拆分。我的数据结构如下。
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
你可以尝试在基地 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))