13

を使用してRにロードできるデータのファイルのCSVがありますread.csv()

一部のデータが欠落しているため、データ フレームを完全に欠落していないデータで構成されるセットに減らしたいと考えています。つまり、NULLどこかに a が表示されている場合は、その列と行をフィルター処理されたデータ セットから除外したいと考えています。

組み込みの R ベクトル演算を使用してこれをかなり簡単に実行できることはわかっていますが、これを正確に実行する方法がよくわかりません。

私の質問をもう少し具体的にするために、ここにデータの簡単なサンプルを示します。これにより、私が何をしたいのかがわかります。

DocID       Anno1    Anno7  Anno8
1           7        NULL   8
2           8        NULL   3
44          10       2      3
45          6        6      6
46          1        3      4
49          3        8      5
62          4        NULL   9
63          2        NULL   4
67          11       NULL   3
91          NULL     9      7
92          NULL     7      5
93          NULL     8      8

したがって、この入力が与えられた場合、出力をこれに減らすコードが必要です。

DocID       Anno8
44          3
45          6
46          4
49          5

Anno8NULL 以外のデータを持つ唯一の列であり、NULL 以外のデータを持つ行は 4 つだけです。

4

4 に答える 4

20

na.omit() を使用して欠落を含む任意の行を削除できますが、それは望ましくありません。さらに、現在受け入れられている答えは間違っています。完全な列が得られますが、要求された 1 つ以上の欠損値がある行は削除されません。正しい答えは次のように取得できます。

> a <- data.frame(a=c(1,2),b=c(NA,1), c=c(3,4))
> a
  a  b c
1 1 NA 3
2 2  1 4
> na.omit(a)[,colSums(is.na(a))==0]
  a c
2 2 4

上記の答えが間違っていることを確認するには:

> a[ ,apply(a, 2, function(z) !any(is.na(z)))]
  a c
1 1 3
2 2 4

列 2 に NA があるため、行 1 を削除する必要があります。

于 2009-01-25T00:05:19.107 に答える
8

xあなたのdata.frame(またはmatrix)なら

x[ ,apply(x, 2, function(z) !any(is.na(z)))]

あなたの例は を使用しているので、NULLis.na(·)置き換えられますis.null(·)

または、 を見ることもできますsubset(·)

于 2009-01-24T22:07:32.417 に答える
2
a <- data.frame(a=c(1,2,0,1),b=c(NA,1,NA,1), c=c(3,4,5,1))

na.omit(a)
  a b c
2 2 1 4
4 1 1 1

a[rowSums(is.na(a))==0,]
  a b c
2 2 1 4
4 1 1 1

a[complete.cases(a),]
  a b c
2 2 1 4
4 1 1 1
于 2014-11-17T19:35:02.810 に答える