Iは2次の表があるとしますチェック
表1:
id word
1 apple
1 banana
2 cherry
2 donuts
3 eggplant
3 fish
表2(key_words):
key_words
apple
orange
cherry
peach
I table1の 'word'列の各要素がtable2に存在するかどうかを確認し、次のような結果が得られるかどうかを確認します。
id apple orange cherry peach
1 1 0 0 0
2 0 0 1 0
3 0 0 0 0
たとえば、
1は最初の行にあり、「apple」列はID 1にリンゴが付いていることを示します。
2行目に0、「オレンジ」の列はid2にオレンジが付いていないことを意味します。
、このような結果を得るために、私はループのために書いた:
data=list()
data[[1]]=table1$id
l=dim(table1)[1]
for(i in 2:(length(key_words)+1)){
exist=c()
for(j in 1:l){
d1=table1[which(table1$id==data[[1]][j]),]
if(key_words[i] %in% d1$word){
exist[j]=1
} else {
exist[j]=0
}
}
data[[i]]=exist
}
data=as.data.frame(data)
names(data)=c("id","apple","orange","cherry","peach")
それは作業を行います。
しかし、私のテーブルサイズとキーワード数がはるかに大きくなると、たとえば、10,000のIDと1,000のキーワードがある場合、forループは非常に長い時間実行されます。
実行時間を短縮する方法がいくつかありますか?
key_wordsは主データセットにあります。つまり、あなたの答えから離れています。 (私のひどいDT試行:dat [、lapply(key_words、 "%in%"、word)、by = id]) – user20650
ありがとう、私は間違って読むと思う。正しい出力が得られるように更新されました。 –