从 R 中的数据帧创建一堆邻接矩阵

问题描述 投票:0回答:1

我有一个像这样的数据框:

df <- as.data.frame(matrix(runif(n=45, min=1, max=10), nrow=5))

colnames(df) <- c("CT1|CT1", "CT1|CT2", "CT1|CT3",
  "CT2|CT1", "CT2|CT2", "CT2|CT3",
  "CT3|CT1", "CT3|CT2", "CT3|CT3")
rownames(df) <- c("A", "B", "C", "D", "E")

列名称由源名称和目标名称组成,并除以“|”

   CT1|CT1  CT1|CT2  CT1|CT3  CT2|CT1  CT2|CT2  CT2|CT3  CT3|CT1  CT3|CT2  CT3|CT3
A 1.556076 7.928573 7.997007 3.404986 4.063141 8.446360 4.701470 5.767476 7.234584
B 2.853771 5.479293 9.412347 4.475027 5.338721 7.016201 8.388517 8.104206 5.298577
C 2.589011 7.458567 2.909283 1.120513 6.396092 8.148159 6.823542 1.209981 8.750885
D 7.183206 9.927155 6.865064 4.441492 5.441872 1.971493 8.046395 5.295071 4.942874
E 4.456933 4.420317 2.129996 8.827218 2.675958 7.513399 5.977327 7.590824 3.203175

我需要为 df 的每一行创建一个邻接矩阵列表。例如,对于 A 行,邻接矩阵应如下所示:

         CT1      CT2      CT3
CT1 1.556076 7.928573 7.997007
CT2 3.404986 4.063141 8.446360
CT3 4.701470 5.767476 7.234584
r graph-theory igraph
1个回答
0
投票

基础R:

data.frame(read.table(text = names(df), sep="|")[col(df),], 
        row = rownames(df), val = unlist(df))|>
  xtabs(val~., data = _)

此打印

, , row = A

     V2
V1         CT1      CT2      CT3
  CT1 1.556076 7.928573 7.997007
  CT2 3.404986 4.063141 8.446360
  CT3 4.701470 5.767476 7.234584

, , row = B

     V2
V1         CT1      CT2      CT3
  CT1 2.853771 5.479293 9.412347
  CT2 4.475027 5.338721 7.016201
  CT3 8.388517 8.104206 5.298577

如果您需要将其作为列表,请包括

asplit

data.frame(read.table(text = names(df), sep="|")[col(df),], 
         row = rownames(df), val = unlist(df))|>
   xtabs(val~., data = _)|> 
   asplit(3)
$A
     V2
V1         CT1      CT2      CT3
  CT1 1.556076 7.928573 7.997007
  CT2 3.404986 4.063141 8.446360
  CT3 4.701470 5.767476 7.234584

$B
     V2
V1         CT1      CT2      CT3
  CT1 2.853771 5.479293 9.412347
  CT2 4.475027 5.338721 7.016201
  CT3 8.388517 8.104206 5.298577

$C
     V2
V1         CT1      CT2      CT3
  CT1 2.589011 7.458567 2.909283
  CT2 1.120513 6.396092 8.148159
  CT3 6.823542 1.209981 8.750885

$D
     V2
V1         CT1      CT2      CT3
  CT1 7.183206 9.927155 6.865064
  CT2 4.441492 5.441872 1.971493
  CT3 8.046395 5.295071 4.942874

$E
     V2
V1         CT1      CT2      CT3
  CT1 4.456933 4.420317 2.129996
  CT2 8.827218 2.675958 7.513399
  CT3 5.977327 7.590824 3.203175
© www.soinside.com 2019 - 2024. All rights reserved.