我有一个带有因子的数据框,例如:
> 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
我正在尝试为var1
的特定值生成一个定义为1和0的二分变量。但是,当我输入以下代码时:
> 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。我怎样才能获得我想要的结果?
答案 0 :(得分:2)
我不确定我是否理解您希望代码如何运行,但似乎您只想为var1中的值a,b,c,d或e创建1的向量,其余为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