dat1 <- read.table("dat1.csv",header=T, sep="," ,stringsAsFactors=F) dat2 <- read.table("dat2.csv",header=T, sep="," ,stringsAsFactors=F) v <- dat1$label dat3 <- dat2 for(i in 1:nrow(dat2)) { n1 <- which(is.element(v, dat2$node1[i])) dat3$node1[i] <- dat1$id[n1] n2 <- which(is.element(v, dat2$node2[i])) dat3$node2[i] <- dat1$id[n2] } dat3 > dat3 node1 node2 weight 1 1 2 0.70 2 1 3 0.64 3 1 6 0.55 4 1 9 0.44 5 2 3 0.88 6 2 5 0.50 7 2 8 0.41 8 3 4 0.66 9 3 7 0.60 10 3 8 0.55 11 3 9 0.39 12 4 8 0.38 13 4 9 0.33
No.22078 Re: R ファイルの突合せ 【青木繁伸】 2016/07/18(Mon) 13:56
もとのプログラムも十分早いと思いますが,data.frame(node1=apply(outer(dat1$label, dat2$node1, "=="), 2, which),のようなものも。
node2=apply(outer(dat1$label, dat2$node2, "=="), 2, which),
weight=dat2$weight)
data.frame(node1=outer(dat2$node1, dat1$label, "==") %*% seq_along(dat1$label),
node2=outer(dat2$node2, dat1$label, "==") %*% seq_along(dat1$label),
weight=dat2$weight)
data.frame(node1=charmatch(dat2$node1, dat1$label),
node2=charmatch(dat2$node2, dat1$label),
weight=dat2$weight)
どれがどれくらい速いか試してみてください。
No.22079 【御礼】Re: R ファイルの突合せ 【明石】 2016/07/18(Mon) 18:36
青木先生,
いつもお世話になり,ありがとうございます,明石と申します。
良いお手本を3つもお示しくださり,大変に助かりました。
apply関数を使う方法を期待していましたので,とても勉強になります。
まだ使ったことのないouter関数があり,良い勉強になります。
お休みのところ,大変に有難いご教示をいただき,誠にありがとうございました。● 「統計学関連なんでもあり」の過去ログ--- 048 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る