3

ダミー変数を簡単に作成できる方法を知りたいです。ダミーで多くの同様の質問を見つけましたが、それらはいくつかの外部パッケージに基づいているか、技術的なものです。

私はこのようなデータを持っています:

df <- data.frame(X=rnorm(10,0,1), Y=rnorm(10,0,1))
df$Z <- c(NA, diff(df$X)*diff(df$Y))

Z は、df 内に新しい変数を作成します。つまり、X の変化と Y の変化の積です。今度は、df にダミー変数 D を作成して、if : Z < 0 then D==1、if Z >0 then D== を作成します。 0.

私はこのようにしてみました:

df$D <- NA
for(i in 2:10) {
if(df$Z[i] <0 ) {
D[i] ==1
}
if(df$Z[i] >0 ) {
D[i] ==0
}}

これは機能していません。上記のコードが機能しない理由 (これを行う簡単な方法) と、外部パッケージを使用せずに R でダミー変数を作成する方法を少し説明して知りたいです。

4

3 に答える 3

5

で論理ベクトルを作成し、df$Z < 0でラップしてバイナリに強制できます+

 df$D <- +(df$Z <0)

または@BenBolkerが述べたように、正規のオプションは次のようになります

as.numeric(df$Z < 0)

また

as.integer(df$Z < 0)

ベンチマーク

set.seed(42)
Z <- rnorm(1e7)
library(microbenchmark)
microbenchmark(akrun= +(Z < 0), etienne = ifelse(Z < 0, 1, 0),
           times= 20L,  unit='relative')
#    Unit: relative
#    expr      min       lq     mean   median      uq      max neval
#   akrun  1.00000  1.00000 1.000000  1.00000 1.00000 1.000000    20
# etienne 12.20975 10.36044 9.926074 10.66976 9.32328 7.830117    20
于 2015-11-12T08:12:28.523 に答える