0

2 つの因子ベクトルv1とがありv2、これらは密接に関連しているように見えます (それぞれのエントロピーは結合エントロピーに非常に近い)。実際、私が行うtable(v1,v2)と、次のように表示されます。

     v2
 v1  a2   b2   c2
 a1  0    100   0
 b1  0    0     0
 c1  0    0     0
     v2 
 v1  d2   e2   f2
 a1  0    0     0
 b1  0    0     0
 c1  0    0     0

など - 各因子には数十のレベルがあるため、すべてが 0 の線がたくさん得られます。

ゼロしかない行を省略してテーブルを印刷するにはどうすればよいですか?

4

4 に答える 4

4

rowSums(d)==0もがまたは同等のものを使用しているようですが、それは同じ数の1とマイナス1またはその他のゼロサムコンボを持つ行も抑制します. 以下を使用する方が安全です。

d[ rowSums(d==0) != ncol(d) , ]   

オブジェクトが「テーブル」の結果である場合、負のエントリのリスクはありませんが、この戦略が他の設定に不適切に適用された場合にリスクが発生すると思います。

于 2012-08-06T18:40:41.633 に答える
2

あなたの例を使用して:

v1 <- factor(rep("a1", 100), levels = paste0(letters[1:3], 1))
v2 <- factor(rep("b2", 100), levels = paste0(letters[1:6], 2))

R> table(v1, v2)
    v2
v1    a2  b2  c2  d2  e2  f2
  a1   0 100   0   0   0   0
  b1   0   0   0   0   0   0
  c1   0   0   0   0   0   0

次に、rowSums()関数は使用する行の合計を計算します。これは、テーブルが変装したベクトルまたは行列であるため機能します。以下の一連の中間ステップでは、行の合計が 0 を超えるかどうかを尋ねて、行の合計を論理ベクトルに変換する方法に注意してください。

R> rowSums(tab)
 a1  b1  c1 
100   0   0 
R> rowSums(tab) > 0
   a1    b1    c1 
 TRUE FALSE FALSE 
R> tab[rowSums(tab) > 0, ]
 a2  b2  c2  d2  e2  f2 
  0 100   0   0   0   0 

上記は空の次元を削除します。テーブル形式を維持したい場合は、呼び出しに追加しますが、すべての列が必要なため、そこにdrop = FALSEある余分な点に注意してください。したがって、間の引数は空です。,, ,

R> tab[rowSums(tab) > 0, , drop = FALSE]
    v2
v1   a2  b2 c2 d2 e2 f2
  a1  0 100  0  0  0  0
于 2012-08-06T18:31:21.727 に答える
2

rowsums0 より大きい論理ベクトルを取得するには、これにアプローチします。次に、そのベクトルを次のようにインデックス付けして使用します。

#make an example (please do this for yourself in the future)
d <- table(x=1:5, y=1:5)
d[1, 1] <- 0 #make one row have all 0s

d[rowSums(d) > 0, ]
于 2012-08-06T18:24:52.383 に答える
1

@Gavinの回答からサンプルデータを借りる

v1 <- factor(rep("a1", 100), levels = paste0(letters[1:3], 1))
v2 <- factor(rep("b2", 100), levels = paste0(letters[1:6], 2))

を使用droplevelsして、どこにも表示されない値を削除できます (すべて 0 の行またはすべて 0 の列に相当)。

> table(droplevels(v1), droplevels(v2))

      b2
  a1 100

行のみを削除する場合:

> table(droplevels(v1), v2)
    v2
      a2  b2  c2  d2  e2  f2
  a1   0 100   0   0   0   0
于 2012-08-06T19:37:24.187 に答える