SNA 関係者: R のデータ フレームから 2 モード ネットワークを作成しようとしています。親組織の共通メンバーシップを介して接続されている組織のリストがあります。私はバイナリ変数でコード化されたその組織のメンバーシップを持っています。次のコードを使用して、これらのデータに基づいて社会マトリックスと後続のネットワーク オブジェクトを正常に作成しました ( 「バイナリ変数に基づいて隣接マトリックスを作成する」から)。
library(statnet)
org <- c("A","B","C","D","E","F","G","H","I","J")
link <- c(1,0,0,0,1,1,0,0,1,1)
person <- c("Mary","Michael","Mary","Jane","Jimmy",
"Johnny","Becky","Bobby","Becky","Becky")
df <- data.frame(org,link,person)
socmat1 <- tcrossprod(df$link)
rownames(socmat1) <- df$org
colnames(socmat1) <- df$org
diag(socmat1) <- 0
socmat1
#> A B C D E F G H I J
#> A 0 0 0 0 1 1 0 0 1 1
#> B 0 0 0 0 0 0 0 0 0 0
#> C 0 0 0 0 0 0 0 0 0 0
#> D 0 0 0 0 0 0 0 0 0 0
#> E 1 0 0 0 0 1 0 0 1 1
#> F 1 0 0 0 1 0 0 0 1 1
#> G 0 0 0 0 0 0 0 0 0 0
#> H 0 0 0 0 0 0 0 0 0 0
#> I 1 0 0 0 1 1 0 0 0 1
#> J 1 0 0 0 1 1 0 0 1 0
testnet <- as.network(x = socmat1,
directed = FALSE,
loops = FALSE,
matrix.type = "adjacency"
)
testnet
#> Network attributes:
#> vertices = 10
#> directed = FALSE
#> hyper = FALSE
#> loops = FALSE
#> multiple = FALSE
#> bipartite = FALSE
#> total edges= 10
#> missing edges= 0
#> non-missing edges= 10
#>
#> Vertex attribute names:
#> vertex.names
#>
#> No edge attributes
reprex パッケージ(v0.3.0)により 2020-10-24 に作成
ただし、次のコードに示すように、同様に使用して、組織によって接続された個人と同じ結果を達成することはできませんtcrossprod()
。また、その逆も同様です。
socmat2 <- tcrossprod(df$org)
#> Error in df$org: object of type 'closure' is not subsettable
rownames(socmat2) <- df$person
#> Error in df$person: object of type 'closure' is not subsettable
colnames(socmat2) <- df$person
#> Error in df$person: object of type 'closure' is not subsettable
diag(socmat2) <- 0
#> Error in diag(socmat2) <- 0: object 'socmat2' not found
socmat2
#> Error in eval(expr, envir, enclos): object 'socmat2' not found
エッジの最初のセットがより大きな組織内の組織のメンバーシップ (リンク変数で示される) であり、2 番目のエッジが組織内の個人の指導的地位である 2 モード ネットワークを作成するにはどうすればよいですか?
皆さんありがとう。
reprex パッケージ(v0.3.0)により 2020-10-24 に作成