3

そのため、フレームの特定の列に特定の単語が含まれているかどうかに基づいて、データ フレームにアタッチするダミー変数を作成しようとしています。列は次のようになります。

 dumcol = c("good night moon", "good night room", "good morning room", "hello moon")

そして、各行に含まれる単語に基づいてダミー変数を作成します。たとえば、最初の行には"good", "night",andが含まれますが、 orは含まれ"moon"ません。"room", "morning""hello"

私がこれまで行ってきた方法は、非常に原始的な方法で、適切なサイズの 0 値の行列を作成し、次のように for ループを使用することです。

result=matrix(ncol=6,nrow=4)
wordlist=unique(unlist(strsplit(dumcal, " ")))
for (i in 1:6)
{ result[grep(wordlist[i], dumcol),i] = 1 }

または似たようなもの。より高速でリソース効率の高い方法があると思います。何かアドバイス?

4

3 に答える 3

3

あなたは試すことができます:

library(tm)
myCorpus <- Corpus(VectorSource(dumcol))
myTDM <- TermDocumentMatrix(myCorpus, control = list(minWordLength = 1))
as.matrix(myTDM)

これにより、次のことが得られます。

#         Docs
#Terms     1 2 3 4
#  good    1 1 1 0
#  hello   0 0 0 1
#  moon    1 0 0 1
#  morning 0 0 1 0
#  night   1 1 0 0
#  room    0 1 1 0

列にダミー変数が必要な場合は、DocumentTermMatrix代わりに次を使用できます。

#    Terms
#Docs good hello moon morning night room
#   1    1     0    1       0     1    0
#   2    1     0    0       0     1    1
#   3    1     0    0       1     0    1
#   4    0     1    1       0     0    0
于 2015-05-28T17:22:37.770 に答える
3

試す

 library(qdapTools)
 mtabulate(strsplit(dumcol, ' '))
 #    good hello moon morning night room
 #1    1     0    1       0     1    0
 #2    1     0    0       0     1    1
 #3    1     0    0       1     0    1
 #4    0     1    1       0     0    0

または

 library(splitstackshape)
 cSplit_e(as.data.frame(dumcol), 'dumcol', sep=' ', 
                      type='character', fill=0, drop=TRUE)
 #  dumcol_good dumcol_hello dumcol_moon dumcol_morning dumcol_night dumcol_room
 #1           1            0           1              0            1           0
 #2           1            0           0              0            1           1
 #3           1            0           0              1            0           1
 #4           0            1           1              0            0           0
于 2015-05-28T17:22:41.067 に答える