У меня возникают странные проблемы с dplyr и комбинацией group_by, mutate и ifelse. Рассмотрим следующие data.frame
> df1
crawl.id group.id hits.diff
1 1 1 NA
2 1 2 NA
3 2 2 0
4 1 3 NA
5 1 3 NA
6 1 3 NA
Когда я использую его, следующий код
library(dplyr)
df1 %>%
group_by(group.id) %>%
mutate( hits.consumed = ifelse(hits.diff<=0,-hits.diff,0) )
По какой-то причине я получаю
Error: incompatible types, expecting a logical vector**
Однако удаление либо group_by()
, либо ifelse
работает как ожидалось:
df1 %>%
mutate( hits.consumed = ifelse(hits.diff<=0,-hits.diff,0) )
crawl.id group.id hits.diff hits.consumed
1 1 1 NA NA
2 1 2 NA NA
3 2 2 0 0
4 1 3 NA NA
5 1 3 NA NA
6 1 3 NA NA
df1 %>%
group_by( group.id ) %>%
mutate( hits.consumed = -hits.diff )
crawl.id group.id hits.diff hits.consumed
1 1 1 NA NA
2 1 2 NA NA
3 2 2 0 0
4 1 3 NA NA
5 1 3 NA NA
6 1 3 NA NA
Это ошибка или функция? Может ли кто-нибудь повторить это? Что такого особенного в этой конкретной комбинации group_by, mutate и ifelse, которая заставляет его терпеть неудачу?
Мои исследования привели меня сюда: https://github.com/hadley/dplyr/issues/464 что предполагает, что он должен быть исправлен к настоящему времени.
Вот dput(df1)
:
structure(list(crawl.id = c(1, 1, 2, 1, 1, 1), group.id = structure(c(1L,
2L, 2L, 3L, 3L, 3L), .Label = c("1", "2", "3"), class = "factor"),
hits.diff = c(NA, NA, 0, NA, NA, NA)), .Names = c("crawl.id",
"group.id", "hits.diff"), row.names = c(NA, -6L), class = "data.frame")