68

バグだと思うものに遭遇しました。大したことではありませんが、他の誰かがこれを見たかどうか知りたいです。残念ながら、私のデータは機密であるため、例を作成する必要があり、あまり役に立ちません。

データをサブセット化すると、元のデータ フレームにない謎の NA 行が時々表示されます。行名でさえNAです。例えば:

example <- data.frame("var1"=c("A", "B", "A"), "var2"=c("X", "Y", "Z"))
example

  var1 var2
1    A    X
2    B    Y
3    A    Z

それから私は実行します:

example[example$var1=="A",]

  var1 var2
1    A    X
3    A    Z
NA<NA> <NA>

もちろん、上記の例では、実際にはこの不思議な NA 行が得られるわけではありません。ここに追加して、データで発生している問題を説明します。

おそらく、 Google の read.xlsx パッケージを使用して元のデータ セットをインポートし、サブセット化する前にワイドからロングへのリシェイプを実行しているという事実に関係しています。

ありがとう

4

7 に答える 7

73

which条件を次のようにラップします。

df[which(df$number1 < df$number2), ]

使い方:

条件が一致する行番号 (条件が の場合TRUE) を返し、それに応じてデータ フレームをそれらの行にサブセット化します。

と言う:

which(df$number1 < df$number2)

行番号1234および を返します5

そのため、次のように記述します。

df[which(df$number1 < df$number2), ]

は次のように書くのと同じです:

df[c(1, 2, 3, 4, 5), ]

または、さらに単純なバージョンは次のとおりです。

df[1:5, ]
于 2016-05-20T16:17:11.973 に答える
33

これはすでにOPによって回答されていることがわかりますが、彼のコメントはコメントセクションの奥深くに埋もれているため、この問題を修正しようとしています(少なくとも私のデータでは同じように動作していました)。

まず、いくつかのサンプル データ:

> df <- data.frame(name = LETTERS[1:10], number1 = 1:10, number2 = c(10:3, NA, NA))
> df
   name number1 number2
1     A       1      10
2     B       2       9
3     C       3       8
4     D       4       7
5     E       5       6
6     F       6       5
7     G       7       4
8     H       8       3
9     I       9      NA
10    J      10      NA

次に、単純なフィルターの場合:

> df[df$number1 < df$number2, ]
     name number1 number2
1       A       1      10
2       B       2       9
3       C       3       8
4       D       4       7
5       E       5       6
NA   <NA>      NA      NA
NA.1 <NA>      NA      NA

ここでの問題はNA、3 番目の列に s が存在すると、R が行全体を として書き換えてしまうことNAです。それでも、データ フレームの寸法は維持されます。これが私の修正です。これには、どの列にNAsが含まれているかを知る必要があります。

> df[df$number1 < df$number2 & !is.na(df$number2), ]
  name number1 number2
1    A       1      10
2    B       2       9
3    C       3       8
4    D       4       7
5    E       5       6
于 2014-12-15T18:56:13.320 に答える
14

あなたが投稿したものと同様のコードを使用すると、同じ問題が発生します。関数subset()の使用

subset(example,example$var1=="A")

代わりに NA 行が除外されます。

于 2014-05-07T13:58:09.490 に答える
0

別の原因として、因子列がそのレベルに含まれていない値と等しいかどうかを確認するなど、条件を誤っている可能性があります。しばらくお邪魔しました。

于 2016-09-20T11:10:13.260 に答える