2012-07-30 16 views
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,但其餘的成爲來港定居。我怎樣才能獲得我想要的結果?

回答

2

我不確定我甚至無法理解您的代碼是如何運行的,但您似乎只想爲var1中的值爲a,b,c,d或e,其餘爲0。如果是這種情況,那麼只需使用%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