【R】vector型のアウトプットをファイル出力したい
前提・実現したいこと
とあるグループの年度ごとのネットワーク中心性を算出していきたいと考えています。
年度ごとにループ処理をして、結果をファイルに出力したいという状況です。
- インプットデータはdata frameで処理している。
- 2つある中心性の結果はvector型。
- リスト年度ごとに対象ユーザID数が異なる。
- これらを「年度、ユーザID、次数中心性, 近接中心性」の4列にまとめてファイルに出力したい。
発生している問題・エラーメッセージ
- 算出結果をそのままrbind
警告メッセージ: 1: rbind(deg.all, deg) で: number of columns of result is not a multiple of vector length (arg 2) 2: rbind(deg.all, deg) で: number of columns of result is not a multiple of vector length (arg 2) 3: rbind(deg.all, deg) で: number of columns of result is not a multiple of vector length (arg 2)
- 算出結果(vector型)をarray, matrix, dataframe等に変換してrbind
rbind(deparse.level, ...) でエラー: 引数の列の数が一致しません
- パッケージdplyrを用いて、算出結果(vector型)をarray, matrix, dataframe等に変換してbind_rows
エラー: Argument 1 must have names
該当のソースコード
R
1install.packages("igraph") 2library(igraph) 3 4install.packages("dplyr") 5library(dplyr) 6 7d <- read.csv(file='res_0322_test.csv', header=T, sep=",", fileEncoding = "UTF-8") 8 9year_list <- unique(d$year) 10c <- length(year_list) 11 12deg.all <- data.frame() 13 14c <- 1 15while(c <= length(year_list)) 16 { 17 ds <- with(d, d[year==year_list[c], , drop=F]) #年度ごとに行を抽出 18 g1 <- graph.data.frame(ds[,3:4],directed=F) #3-4列目にユーザIDの1:1のペアが入っている 19 20 #igraphの中心性指標 21 deg <- degree(g1) #次数中心性 22 clo <- closeness(g1) #近接中心性 23 24 #困っている箇所はこの辺り 25 deg <- as.matrix(deg) 26 colnames(deg) <- c("degree") 27 deg.all <- bind_rows(list(deg.all, deg)) 28 29 c <- c + 1 30 } 31 32write.csv(deg.all, "deg_test.csv")
インプット・算出結果(vector型)
- インプット
year name_no.x name_no.y N
2016 222 758 1
2016 401 758 1
2016 758 222 1
2016 758 401 1
2017 222 758 1
2017 401 758 1
2017 401 955 2
2017 758 222 1
2017 758 401 1
2017 758 955 1
2017 955 401 2
2017 955 758 1
2018 222 758 1
2018 401 758 1
2018 401 955 2
2018 758 222 1
2018 758 401 1
2018 758 955 1
2018 955 401 2
2018 955 758 1
2019 222 758 1
2019 222 1766 1
2019 401 758 1
2019 401 1153 1
2019 758 222 1
2019 758 401 1
2019 758 1153 1
2019 758 1766 1
2019 1153 401 1
2019 1153 758 1
2019 1766 222 1
2019 1766 758 1
- 算出結果(単純にprint(deg),print(clo)で出力したもの↓)
222 401 758
2 2 4
222 401 758
0.3333333 0.3333333 0.5000000
222 401 758 955
2 4 6 4
222 401 758 955
0.2000000 0.2000000 0.3333333 0.2000000
222 401 758 955
2 4 6 4
222 401 758 955
0.2000000 0.2000000 0.3333333 0.2000000
222 401 758 1153 1766
4 4 8 4 4
222 401 758 1153 1766
0.1666667 0.1666667 0.2500000 0.1666667 0.1666667
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。