df$a == 0
- это c(FALSE, FALSE, FALSE)
.
which(df$a == 0)
- это пустой целочисленный вектор.
Отрицание пустого вектора still дает пустой вектор.
И подмножество с пустым вектором, к сожалению, также приводит к пустому вектору.
Решением в этом случае будет использование логической индексации и отбрасывание использования which
, Это должно обычно быть сделано в этом случае:
df[! df$a == 0, ]
# or:
df[df$a != 0, ]
Это всегда дает правильное решение; не нужно which
.