2017-05-04 5 views
1

新しいデータフレームdf2を作成するには、既存のデータフレームをサブセット化し、dfという名前の列の値がcolumnである行が0でない行を作成する必要がありました。私が最初に試した何Rのマイナスセット補数演算子の使い方は?

されました:

df2 <- df[-(df$column == 0), ] 

しかし、これは動作しませんでした。どのような仕事をしたことだった。

df2 <- df[(df$column != 0), ] 

秒1が働いて、なぜ私が得るが、最初のものはoperator overloadingを除き、機能しなかった理由を私は理解していません。

具体的には、-(df$column == 0)(df$column !=0)を実行すると、論理ベクトルではなく論理ベクトル(df$column == 0)の-1倍の結果が返されます。だから私は値1を望んでいたところ、それは値0を持っていました。どこでも値0を求めていました。値-1でした。
1 -(df$column == 0)のように修正するのはそれほど難しいことではありませんでしたが、私はオペレータ-がそのように動作するとは期待していませんでしたが、セット補数演算子として動作することを期待していました。 (つまりは、私も問題があっただろうと予想していなかったので、私は問題を解決する方法について考えていませんでした。)

コンクリート質問:どのようにR言語が決定しないかどうか、いつ-を解釈します(1)補数演算子を設定します。(2)減算演算子を設定します。(3)-1を乗算します。

オペレータ-を(2)減算演算子として使用するだけですが、Rが(1)と(3)の間でどのように曖昧さがあるかについては言及していません。

また、(2)と(3)は多かれ少なかれ数学的に同等ですが、その実装が同じであるとは限りません。 (例えば、MATLABの行列逆変換)

+3

索引付けのマイナスは、数値索引では機能し、論理索引では機能しません。 '-'演算子は特別なものではなく、' ['は負のインデックスを負の選択として扱うからです。 – Axeman

答えて

2

数値0と1を使用しているため、複雑さが発生すると考えられます。これは、TrueFalseの数値に相当します。

> df1$column==3 
[1] FALSE TRUE 

ため:(df$column==3)リターン2つの論理値を呼び出す

df<- data.frame(column = matrix(c(2,3), nrow=2)) 
> df 
    column 
1  2 
2  3 

:だから私は、上記のdfは2行のみ、および異なる番号を有している場合を使用して、コードで何が悪かったのかを説明しようとしますTRUE=1FALSE=0の場合、df[-(df$column == 3), ]を呼び出すと、df[-(c(0,1),]を呼び出すのと同じです。どちらの場合も、最初の行が削除されています(Rでは0のインデックスなし)。あなたがdf[(df$column != 3),]を呼び出すときに、この時間はあなたが1行を保持しているため

> df1[-(df1$column==3),] 
[1] 3 
> df1[-c(0,1),] 
[1] 3 

逆は真です。あなたがしようとしていた何

> df[(df$column != 3),] 
[1] 2 
> df[c(1,0), ] 
[1] 2 

df$column==3いる行を削除しますが、そのためにあなたはそれが何であるか、行番号を知る必要があり、あなたがそのインデックスが必要です。それはwhich関数と呼ばれます。だから、あなたはどうなる:

それ以外
df2 <- df[-which(df1$column == 3),] 

を、Rでどのように使用されるか-のご理解は正しいです、と私はRは、コンテキストに基づいて、それを使用する方法を決定すると思います。

免責事項 私は長い間、申し訳ありませんが、私はちょうど何かをしたいと思っていました。

+0

これは役に立ちました、ありがとうございます - 私はRが0索引付けまたは否定索引付けをしていないことを知らなかった。 – Chill2Macht

2

-演算子は、1つまたは2つの引数をとる関数として実装されます。

> `-` 
function (e1, e2) .Primitive("-") 

だから表現-a-(a)a - b-(a, b)として解釈されるという意味に解釈されます。

1つの引数を使用すると、逆数を返します(つまり、引数の符号を反転します).2つの引数を指定すると、減算が行われます。

> `-`(3) 
[1] -3 
> `-`(3, 1) 
[1] 2 

設定されていません。

関連する問題