2016-12-06 7 views
0

私は、スパース行列に変換したいつぶやきやその他の変数があります。つぶやきからスパース行列を作成する

これは基本的に私のデータのようです。今は、ツイートを含む1つの列とスコアを含む1つの列を持つdata.tableに保存されます。

Tweet    Score 
Sample Tweet :)  1 
Different Tweet  0 

私はこのようになりますマトリックスにこれを変換したい:私のdata.tableの行ごとにスパース行列の1行があり

Score Sample Tweet Different :) 
    1  1  1   0 1 
    0  0  1   1 0 

。 Rでこれを行う簡単な方法はありますか?

答えて

1

これは、あなたが

library(Matrix) 
words = unique(unlist(strsplit(dt[, Tweet], ' '))) 

M = Matrix(0, nrow = NROW(dt), ncol = length(words)) 
colnames(M) = words 

for(j in 1:length(words)){ 
    M[, j] = grepl(paste0('\\b', words[j], '\\b'), dt[, Tweet]) 
} 

M = cbind(M, as.matrix(dt[, setdiff(names(dt),'Tweet'), with=F])) 

#2 x 5 sparse Matrix of class "dgCMatrix" 
#  Sample Tweet :) Different Score 
#[1,]  1  1 .   .  1 
#[2,]  .  1 .   1  . 

欲しいものに近い唯一の小さな問題は、正規表現を単語として':)'を認識していないことです。たぶん正規表現をよく知っている人は、これを修正する方法をアドバイスすることができます。

+0

私は上記のdata.table構文を使用します。コードをそのまま使用するには、データ、テーブルに変換してください。 – dww

+0

お返事ありがとうございます。私がこの権利を見ているのであれば、grepl(words [j]、tweet $( '\\ b'、words [j]、 '\\ b')、dt [ Tweet)。テストシナリオでは機能しますが、どこが失敗するかについて考えていない別のシナリオがあるかどうかはわかりません。また、これが少し変更された場合はどうなり、スパース行列に単語の出現頻度が欲しかったのです。したがって、Differentが2回書き込まれた場合、疎なマトリックスは2と表示されます。同様に簡単な方法がありますか? – Kristofersen

+0

あなたは単に '\\ b'を削除することはできませんまたは別の単語のformpartの単語に一致します。例えば'hat'は 'that'と一致します – dww

関連する問題