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 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る