2

元の質問

データ フレーム内の x の各値に対してデータ フレームに一連のダミー変数を追加したいが、別の変数が NA の場合は NA を含みます。たとえば、次のデータ フレームがあるとします。

x <- seq(1:5)
y <- c(NA, 1, NA, 0, NA)
z <- data.frame(x, y)

私は生産しようとしています:

  • x == 1 の場合は z$var1 == 1、そうでない場合は y == NA、z$var1 == NA、そうでない場合は z$var1 == 0 のような var1。
  • x == 2 の場合は z$var2 == 1、そうでない場合は y == NA、z$var2 == NA、そうでない場合は z$var2 == 0 のような var2。
  • var3など

これをベクトル化する方法がわかりません。x の多数の値に使用できるソリューションを探しています。

アップデート

x の各インデックスを反復処理したいという混乱がありました。私はこれを探しているのではなく、x の一意の値ごとに変数を作成するソリューションを探しています。以下のデータを入力として取得する場合:

x <- c(1,1,2,3,9)
y <- c(NA, 1, NA, 0, NA)
z <- data.frame(x, y)

z$var1、z$var2、z$var3、z$var9 を探しています。ここで、z$var1 <- c(1, 1, NA, 0, NA) および z$var2 <- c(NA, 0, 1) 、0、NA)。元の解では、z$var1 <- z$var2 <- c(1,1,NA,0,NA) が生成されます。

4

1 に答える 1

2

ifelseベクトル化された を使用して、変数を作成できます。

cbind(z, setNames(data.frame(sapply(unique(x), function(i) ifelse(x == i, 1, ifelse(is.na(y), NA, 0)))), 
                  paste("var", unique(x), sep = "")))

  x  y var1 var2 var3 var9
1 1 NA    1   NA   NA   NA
2 1  1    1    0    0    0
3 2 NA   NA    1   NA   NA
4 3  0    0    0    1    0
5 9 NA   NA   NA   NA    1

更新

cbind(z, data.frame(sapply(unique(x), function(i) ifelse(x == i, 1, ifelse(is.na(y), NA, 0)))))
  x  y X1 X2 X3 X4
1 1 NA  1 NA NA NA
2 1  1  1  0  0  0
3 2 NA NA  1 NA NA
4 3  0  0  0  1  0
5 9 NA NA NA NA  1
于 2016-06-20T15:09:13.320 に答える