2011-07-06 4 views
3

SQLから借用するために、NULLでない値に基づいてデータフレームのサブセットを取得しようとしています。何かを試してみてください:サブセット()内の定義された値の確認

lately <- subset(data, year > 1997 & myvalue != NA) 

しかし、それは正しくありません。任意のヒント、r'sters?

+0

データ? 「正しくない」の定義ですか?私たちは読者ではありません。 –

答えて

7
subset(data, year > 1997 & !is.na(myvalue)) 

する必要があります。お使いのバージョンが動作しない理由は、NAのデータムがわからないため、foo != NAまたはfoo == NAは常にNAです。 is.na()を使用してNAをテストし、 "NOT NA"を使用する場合は!を使用して無効にします。

例えば:

> dat <- data.frame(year = 1995:2000, myvalue = c(1,3,4,NA,6,10)) 
> dat 
    year myvalue 
1 1995  1 
2 1996  3 
3 1997  4 
4 1998  NA 
5 1999  6 
6 2000  10 
> subset(dat, year > 1997 & myvalue != NA) 
[1] year myvalue 
<0 rows> (or 0-length row.names) 
> subset(dat, year > 1997 & !is.na(myvalue)) 
    year myvalue 
5 1999  6 
6 2000  10 

あなたのバージョンが動作しない理由について、さらに熟考することは有益です。

句リターンの最初の部分:彼らはFALSEですが、我々は最終のための二句をチェックする必要があるとして、我々は任意のさらなるチェックを行う必要はありません。最初の3つの要素については

> with(dat, year > 1997) 
[1] FALSE FALSE FALSE TRUE TRUE TRUE 

この例では3つの要素があります。上述したように、第2の句は、すべての要素のNAを返す:

> with(dat, myvalue != NA) 
[1] NA NA NA NA NA NA 

従って組み合わさ句戻り値:任意の行を選択しないことになります

> with(dat, year > 1997 & myvalue != NA) 
[1] FALSE FALSE FALSE NA NA NA 

を、ひいてはゼロ列オブジェクトが返さあなたの例のために。

+0

考えていただきありがとうございます。 – Wells

関連する問題