0

次のような要素を含むデータフレームがあります。

> var1 <- gl(10, 2, labels=letters[1:10])
> var2 <- c(1:20)
> data <- data.frame(var1=var1,var2=var2)
> data
   var1 var2
1     a    1
2     a    2
3     b    3
4     b    4
5     c    5
6     c    6
7     d    7
...
20    j   20

の特定の値に対して1と0として定義された二分変数を生成しようとしていますvar1。ただし、次のコードを入力すると、次のようになります。

> data <- data.frame(var1=var1,var2=var2)
> data$var3 <- c(1[which(var1=="a" | var1=="b" | var1=="c" | var1=="d" | 
var1=="e")], 0[which(var1=="f" | var1=="g" | var1=="h" | var1=="i" | var1=="j")])

私は次のようになります:

> data$var3
 [1]  1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

最初の項目は1に変更されますが、残りはNAになります。どうすれば希望の結果を得ることができますか?

4

1 に答える 1

2

コードがどのように機能するかはわかりませんが、var1の値がa、b、c、d、またはe、0のいずれかである場合は1のベクトルを作成したいようです。残りのために。その場合は、単純にを使用%in%して論理ベクトルを作成し、それをラップしas.numericて1と0に変換します。

例:

data$var3 <- as.numeric(data$var1 %in% c("a", "b", "c", "d", "e"))
## Or, shorter:
## data$var3 <- as.numeric(data$var1 %in% letters[1:5])

> head(data, 3)
  var1 var2 var3
1    a    1    1
2    a    2    1
3    b    3    1
> tail(data, 3)
   var1 var2 var3
18    i   18    0
19    j   19    0
20    j   20    0
于 2013-03-23T18:32:25.993 に答える