4

このような与えられたデータ

C1<-c(3,-999.000,4,4,5)
C2<-c(3,7,3,4,5)
C3<-c(5,4,3,6,-999.000)
DF<-data.frame(ID=c("A","B","C","D","E"),C1=C1,C2=C2,C3=C3)

すべての列の-999.000データを削除するにはどうすればよいですか

私はこれが列ごとに機能することを知っています

DF2<-DF[!(DF$C1==-999.000 | DF$C2==-999.000 | DF$C3==-999.000),]

ただし、各列を参照することは避けたいと思います。特定のデータフレームのすべての列を参照する簡単な方法があると思います。

DF3<-DF[!(DF[,]==-999.000),]

また

DF3<-DF[!(DF[,(2:4)]==-999.000),]

しかし、明らかにこれらは機能しません

そして、好奇心から、次のように、最後の角括弧の前に最後のコンマが必要な理由を教えていただければ、ボーナスポイントが得られます。

==-999.000),]
4

4 に答える 4

6

以下が機能する可能性があります

DF[!apply(DF==-999,1,sum),]

または、1行に複数の-999を含めることができる場合

DF[!(apply(DF==-999,1,sum)>0),]

また

DF[!apply(DF==-999,1,any),]
于 2012-06-11T04:13:34.670 に答える
5

「ボーナス」の質問に対処するために、ドキュメントにアクセスすると、次の?Extract.data.frameことがわかります。

データフレームには、いくつかのモードでインデックスを付けることができます。[および[[を単一のインデックス(x[i]または)とともに使用するとx[[i]]、データフレームにリストであるかのようにインデックスが付けられます。この使用法では、drop引数は無視され、警告が表示されます。

そしてまた:

[[[を2つのインデックス(x[i, j]および)とともに使用するとx[[i, j]]、マトリックスのインデックスのように機能[[します。1つの要素を選択するためにのみ使用できます。たとえば、選択した各列についてxj、通常(行列のようなものでない場合)、結果の列はになりxj[i]、対応するメソッドに依存することに注意して[ください。例のセクションを参照してください。

したがって、Rが列ではなく行を参照していることを確認するには、コンマが必要です。

于 2012-06-11T04:16:43.633 に答える
5

コードに基づいて、-999を含むすべての行を削除すると仮定します。

DF2 <- DF[rowSums(DF == -999) == 0, ]

おまけの質問として:データフレームはベクトルのリストであり、すべて同じ長さです。ベクトルを列と考えると、データフレームは、列がさまざまなタイプ(数値、文字など)を持つ可能性がある行列と考えることができます。Rを使用すると、行列の要素を参照するのとほぼ同じ方法でデータフレームの要素を参照できます。行と列のインデックスを使用します。したがって、DFのthベクトルのth要素をDF[i, j]参照します。これは、 th行とth列と考えることができます。したがって、データフレームの一部の行とすべての列のみを保持する場合は、行列のような表記を使用できます。ijijDF[row.indices, ]

于 2012-06-11T04:37:36.853 に答える
2

ターゲットが少なくとも1つのNAを含むすべての行を削除することであるかどうかはわかりません。これが探しているものである場合、これは考えられる答えである可能性があります。

DF[DF==-999] <- NA
na.omit(DF)
   ID C1 C2 C3
1  A  3  3  5
3  C  4  3  3
4  D  4  4  6
于 2012-06-11T20:10:11.553 に答える