【发布时间】:2015-05-27 07:07:55
【问题描述】:
我在使用 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")
【问题讨论】:
-
我也失败了。看起来该组需要至少一个非 NA 值才能正常工作。 IE。
df1[2:3,] %>% group_by(group.id) %>% mutate(hits.consumed = ifelse(hits.diff <=0 , -hits.diff, 0))工作 -
是的,你是对的。
df1[1:3,]失败但df1[2:3,]有效。它似乎是旧 dplyr 问题 464 的转世。 -
您可以将其作为问题提交