Ответ 1
Проблема заключается в переработке векторов.
Ваша первая строка делает именно то, что вы ожидаете. Он проверяет, какие элементы df$time
находятся в c(0.5, 3)
и возвращает значения.
Ваша вторая строка сложнее. Это фактически эквивалентно
df[df$time == rep(c(0.5,3), length.out=nrow(df)),]
Чтобы увидеть это, посмотрим, что произойдет, если вы используете вектор rep(0.5, 10)
:
rep(0.5, 10) == c(0.5, 3)
[1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
Посмотрите, как он возвращает каждое нечетное значение. По существу, оно соответствует 0,5 вектору c(0.5, 3, 0.5, 3, 0.5...)
Вы можете манипулировать вектором, чтобы не создавать совпадений таким образом. Возьмите вектор: rep(c(3, 0.5), 5)
:
rep(c(3, 0.5), 5) == c(0.5, 3)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Все они ЛОЖНЫ. Вы сопоставляете каждые 0,5 с 3 и наоборот.