想要在R中一次分配虚拟变量的值

时间:2013-06-27 15:01:32

标签: r

我已经有一个变量,比如 year ,由

生成
year <- seq(from=1790,to=1970,by=10) 

现在我要生成一个虚拟变量,比如说 z ,它在 year = 1940 year = 1950 ,0到处都是。我的方法对我来说很尴尬,是

z <- rep(0,times=length(year))   # initialize z
z[year==1940|year==1950] <- 1  

现在我想知道是否有更好的方法,比如一次分配值,因为z的初始化实际上是耗时的。

2 个答案:

答案 0 :(得分:5)

z <- as.numeric(year %in% c(1940, 1950))

虽然我很好奇;你所拥有的应该已经足够快到达所有实际目的。

答案 1 :(得分:3)

实际上,使用|似乎要快一点,虽然只有你的矢量更大才有意义:

> as.integer(year %in% c(1940, 1950))
 [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0

> as.integer(year==1940 | year==1950)
 [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0

Microbenchmark结果:

Unit: microseconds
                                    expr   min    lq median    uq     max neval
     as.integer(year %in% c(1940, 1950)) 4.004 4.733  5.097 5.461 103.752  1000
 as.integer(year == 1940 | year == 1950) 1.820 2.185  2.548 2.912   9.829  1000