前提
Rでネットワーク分析を行っています。
インプットは、とあるグループに所属する人員をAさん-Bさん、Aさん-Cさん、、Bさん-Cさん、、のように組み合わせたデータです。codeはグループ名、name.xとname.yには組み合わせた人員名が入っています。
code | name.x | name.y |
---|---|---|
1012 | Aさん | Bさん |
1012 | Aさん | Cさん |
1012 | Aさん | Dさん |
1012 | Bさん | Aさん |
1012 | Bさん | Cさん |
... | ... | ... |
発生している問題
- igraphを使って算出した結果をCSVへ出力しようとしているが、エラーが発生。
resFrame1<-data.frame(name[i],gdata.deg[i],gdata.clo[i],gdata.eve[i],gdata.bet[i])
Error in as.data.frame.default(x[[i]], optional = TRUE) : cannot coerce class ""igraph.vs"" to a data.frame
R
1pdata <- fread("file.csv", sep=",", header=T) 2 3list_name <- unique(pdata$name.x) 4resFrame1<-data.frame() #forループ上書き 5resFrame2<-data.frame() #最終的な結果統合用 6 7m <- length(list_name) 8for(i in 1:m){ 9gdata <- graph.data.frame(pdata[,3:4], directed=F) 10 11gdata.deg <- degree(gdata) #次数中心性 12gdata.clo <- closeness(gdata) #近接中心性 13gdata.eve <- evcent(gdata)$vector #固有ベクトル中心性 14gdata.bet <- betweenness(gdata) #媒介中心性 15name <- V(gdata) 16 17resFrame1<-data.frame(name[i],gdata.deg[i],gdata.clo[i],gdata.eve[i],gdata.bet[i]) #i番目の結果を代入 18resFrame2<-rbind(resFrame2,resFrame1) #resFrame2の末行にresFrame1を代入 19} 20write.csv(resFrame2, "test.csv")
実現したいこと
-4つの中心性を計算し、人名ごとに4つの中心性を出力したい。
name | 次数中心性 | 近接中心性 |
---|---|---|
Aさん | 3 | 0.2 |
Bさん | 4 | 0.6 |
よろしくお願いします。
ループについて、下記のように書き換えてみましたが、エラーが発生しました。
原因と解消方法を知りたいです。
---------------------------------------------------------------------------------
resFrame1<-data.frame() #forループのたびに上書き
resFrame2<-data.frame() #最終的な結果統合用
m <- length(list_name)
for(i in 1:m){
gdata <- graph.data.frame(pdata2[,3:4], directed=F)
gdata.deg <- degree(gdata) #次数中心性
gdata.clo <- closeness(gdata) #近接中心性
gdata.eve <- evcent(gdata)$vector #固有ベクトル中心性
gdata.bet <- betweenness(gdata) #媒介中心性
name <- V(gdata)
resFrame1<-data.frame(name[i],gdata.deg[i],gdata.clo[i],gdata.eve[i],gdata.bet[i]) #i番目の結果を代入
resFrame2<-rbind(resFrame2,resFrame1) #resFrame2の末行にresFrame1を代入
}
---------------------
■発生したエラー
as.data.frame.default(x[[i]], optional = TRUE) でエラー:
cannot coerce class ‘"igraph.vs"’ to a data.frame
回答3件
あなたの回答
tips
プレビュー