2016-04-13 5 views
0

私はRの初心者です。データフレーム(df1)を使用して作業しています。 HOUSE. NO , E1, D11, DC11は、フレーム内のさまざまな列名です。以下は、実行した論理サブセットの結果です。論理サブセットの不明確な不一致がR

df1 
    HOUSE.NO D11 DC11 E1 
75 16/215 2 2 NA 
76 15/262 1 1 2 
77 16/220 1 1 2 
78 14/13 1 1 1 
79  14/9 2 2 NA 
df1$HOUSE.NO[df1$E1==1&any(!df1$D11==1,!df1$DC11==1)] 
[1] NA  "14/13" NA 

しかし、「14/13」値のため、私は個別論理の値を計算するとき、それはFALSEを出てきました。

df1$E1[df1$HOUSE.NO=="14/13"]==1&any(df1$D11[df1$HOUSE.NO=="14/13"]!=1, df1$DC11[df1$HOUSE.NO=="14/13"]!=1) 
[1] FALSE 

これはどのようになったのかわかりません。私はまた、独立してデータフレームをチェックし、それが間違って来るのは理にかなっていました。なぜこれが起こったのか教えてください。

+1

私の場合は再現性の例を示してください – akrun

+0

@akrunですが、私はどここの他の場所を持っていません起こりました。私が取り組んでいるデータフレームから追加情報を提供する必要がありますか? –

+0

私はデータセット全体をどのように表示するのではないのですか?あなたがこの問題を再現可能な最初の6行またはそれ以上のdputを表示すると、それは理解しやすいだろう – akrun

答えて

1

anyはベクトル全体に適用され、==はベクトルの各要素に適用されます。例えば

e1 <- c(1, 1, 1) 
d11 <- c(1, 2, 2) 
dc11 <- c(1, 1, 2) 
house <- c("14/13", "a", "b", "c") 

あなたはすべての家が正しい条件を、満たすために言われているこの

house[e1==1 & any(d11!=1, dc11!=1) ] 

をテスト

。しかし、家の番号14/13だけを見てみると、E1の確信度は1ですが、D11とDC11は両方とも1に等しいです。 anyの比較では、 " any"テストに合格しています。言い換えれば

:あなたがこの単一TRUEを組み合わせると(両方とも私たちの例では)少なくとも家にありますので、すべての住宅に適用されたときに、単一のTRUEを返しany(d11!=1, dc11!=1)は、D11やDC11のために1に等しいではありませんブール値のベクトル(ここではc(TRUE, TRUE, TRUE))を&に設定すると、ベクトルc(TRUE & TRUE, TRUE & TRUE, TRUE & TRUE)が返されます。

ここで、家の番号「14/13」の操作を実行すると、(anyの部分のために)any(d11[house=="14/13"]!=1, dc11[house=="14/13"]!=1)を実行し、FALSEを取得します。結論として

、実行したいコマンドが

house[ e1[house=="14/13"]]==1 & any(d11!=1, dc11!=1) ] 

なく

house[ e1[house=="14/13"]]==1 & 
    any(d11[house=="14/13"]!=1, dc11[house=="14/13"]!=1) ]