Разве результат не должен быть c (1,2,3)? - PullRequest
1 голос
/ 05 апреля 2020

Итак, если я запусту это

df = data.frame(a= c(1,2,3,0))
df= df[-which(df$a == 0),]

Как и ожидалось, результат будет c (1,2,3). Но если нет 0 как:

df = data.frame(a= c(1,2,3))
df= df[-which(df$a == 0),]

Это вернет пустой вектор. Разве результат не должен быть c (1,2,3)?

1 Ответ

2 голосов
/ 05 апреля 2020

df$a == 0 - это c(FALSE, FALSE, FALSE).

which(df$a == 0) - это пустой целочисленный вектор.

Отрицание пустого вектора still дает пустой вектор.

И подмножество с пустым вектором, к сожалению, также приводит к пустому вектору.

Решением в этом случае будет использование логической индексации и отбрасывание использования which , Это должно обычно быть сделано в этом случае:

df[! df$a == 0, ]
# or:
df[df$a != 0, ]

Это всегда дает правильное решение; не нужно which.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...