Я пытаюсь выполнить некоторые условные манипуляции и нахожу странную ошибку dplyr - или, по крайней мере, она не ведет себя так, как мне кажется.
Допустим, у меня есть тиббл
a <- tribble(
~x, ~y,
1, 2,
1, 3,
1, -5,
2, 1,
2, 8,
2, 9
)
Теперь для каждой группы (x) я хочу увеличить его, если какое-либо из значений будет отрицательным, так что самое низкое из ранее отрицательных значений теперь равно 0. Давайте также положимв некоторых проверках ошибок, чтобы убедиться, что any()
работает правильно.
a %>%
group_by(x) %>%
mutate(hasneg = any(y<0),
y_star = ifelse(any(y<0), y+abs(min(y, na.rm=T)), y))
Это дает
# A tibble: 6 x 4
# Groups: x [2]
x y hasneg y_star
<dbl> <dbl> <lgl> <dbl>
1 1 2 TRUE 7
2 1 3 TRUE 7
3 1 -5 TRUE 7
4 2 1 FALSE 1
5 2 8 FALSE 1
6 2 9 FALSE 1
Теперь, hasneg
TRUE для x =1, и FALSE для x = 0, подразумевая, что он работал правильно на векторе.И все же мое утверждение ifelse привело к чему-то странному - либо 2 + 5 для x = 1, либо 1 для x = 2.Я бы ожидал 7,8,0,1,8,9.
Что здесь происходит?Почему ifelse странно работает с этими векторами в сгруппированном фрейме данных?