2016-07-12 4 views
0

私はas.matrixに強制したパッケージR {tm}のこの文書用語行列を持っています。ここMWE:行列をサブセット化して、列名を扱います

> inspect(dtm[1:ncorpus, intersect(colnames(dtm), thai_list)]) 
<<DocumentTermMatrix (documents: 15, terms: 4)>> 
Non-/sparse entries: 17/43 
Sparsity   : 72% 
Maximal term length: 12 
Weighting   : term frequency (tf) 

Terms 
Docs toyota_suv gmotors_suv ford_suv nissan_suv 
1  0  1  0   0 
2  0  1  0   0 
3  0  1  0   0 
4  0  2  0   0 
5  0  4  0   0 
6  1  1  0   0 
7  1  1  0   0 
8  0  1  0   0 
9  0  1  0   0 
10  0  1  0   0 

私はtoyota_suvを参照文書(行)が、ありません、他の車両のみを取得するように、このas.matrix(dtm)のサブセットにする必要があります。 dmat<-as.matrix(dtm[1:ncorpus, intersect(colnames(dtm), "toyota_suv")])を使用して、1つの用語(toyota_suv)のサブセットを取得します。クエリを設定するにはどうすればよいですか?:toyota_suvはゼロではありませんがtoyota_suv以外のカラムの値はゼロですか?列方向を==0と指定できましたが、この行列は動的に生成されます。いくつかの市場では、4台の自動車が存在し、いくつかの市場では10台が存在し得る。私は事前にコロンネームを指定することはできません。 all_others == 0のように、どのようにnon-toyota_suv列をすべてゼロにする(動的に)? ご協力いただければ幸いです。

答えて

1

あなたがゼロでないためと一致するようにtoyota_suvのインデックス位置を取得し、その後dtmをサブセット化することによって、これを達成することができ、そして他のすべての列に同じインデックス変数に負のインデックスを使用して:あなたは試みることができますそれらがすべてゼロであることを確認してください。ここで

私は修正あなたdtmは少しtoyota_subが非ゼロで2例は、あなたが探している基準を満たしていることを(あなたの例ではどれも彼らに会っていないので)ので:

dtm <- read.table(textConnection(" 
toyota_suv gmotors_suv ford_suv nissan_suv 
     0  1  0   0 
     0  1  0   0 
     0  1  0   0 
     0  2  0   0 
     0  4  0   0 
     1  0  0   0 
     1  0  0   0 
     0  1  0   0 
     0  1  0   0 
     0  1  0   0"), header = TRUE) 

をそれからそれは動作します:

# get the index of the toyota_suv column 
index_toyota_suv <- which(colnames(dtm) == "toyota_suv") 

# select only cases where toyota_suv is non-zero and others are zero 
dtm[dtm[, "toyota_suv"] > 0 & !rowSums(dtm[, -index_toyota_suv]), ] 
## toyota_suv gmotors_suv ford_suv nissan_suv 
## 6   1   0  0   0 
## 7   1   0  0   0 

注:これは本当にテキスト分析では、すべての問題ではなく、マトリックスオブジェクトのサブセットにどのように1つずつではありません。

+0

ありがとう@Ken Benoit:私はほとんどそこにいた。 – Pradeep

+0

編集タイムアウト。私は非toyota_suv列の別のオブジェクトを作成していました: 'x.df3 <-x.df [、names(x.df)!=" toyota_suv "、drop = FALSE]'そして、 。しかし、私はこのサブセットを最初の条件 'toyota_suv!= 0'と統合することが欠けていました。私は、中間ステップを回避するオプションがないと仮定しています。また、サブセット関数を使うか、 'which'や' with'を使って実行することで、あまりにも多くの否定的なコメントがあります。私は確信が持てませんでした。 – Pradeep

0

実行している正確なコードとサンプルデータセットを提供して作業を複製し、実際の例を提供できるようにすると役に立ちます。

あなたが質問を正しく理解している場合は、トヨタ以外のすべての列をゼロにする方法を探しています。

df[colnames(df) != "toyota"] <- 0

関連する問題