Я бы подтвердил ответ, используя «подмножество», если бы у меня была репутация :-).Вы также можете использовать логический вектор непосредственно для поднабора - нет необходимости для «который»:
d <- data.frame(VAR = c(0,1,0,1,1))
d[d$VAR == 0, , drop=FALSE]
Я удивлен, обнаружив логическую версию немного быстрее, по крайней мере, в одном случае.(Я ожидал, что «какая» версия может победить из-за того, что R, возможно, предварительно выделит нужный объем памяти для результата.)
> d <- data.frame(y=rep(c(1,0), times=1000000))
> system.time(d[which(d$y == 0), ])
user system elapsed
0.119 0.067 0.188
> system.time(d[d$y == 0, ])
user system elapsed
0.049 0.024 0.074