使用dplyr的group_by和summarise时结果未按分组聚合而是混乱合并,该如何修复?
修复dplyr中group_by+summarise的分组聚合问题
嘿,这个问题我碰到过好多次啦!问题出在你summarise里的dep$DEP_TYPE写法——这直接破坏了dplyr的分组逻辑。
当你用group_by(ORIGIN)把数据按ORIGIN分组后,dplyr会自动维护每个分组的上下文,这时候你只需要直接写列名DEP_TYPE就能引用当前分组里的对应列。但你加上dep$之后,相当于强行调用了整个原始数据框的DEP_TYPE列,而不是当前分组的子集,所以sum计算的是全局所有ontime的数量,自然不会按ORIGIN正确分组。
修复起来超简单,把dep$删掉就好:
dep %>% group_by(ORIGIN) %>% summarise(ontime_dep = sum(DEP_TYPE == "ontime", na.rm = TRUE))
另外给你个小建议,如果你用的是较新版本的dplyr(1.0.0及以上),可以用更简洁的count函数来实现同样的效果,代码看起来更清爽:
dep %>% filter(DEP_TYPE == "ontime") %>% count(ORIGIN, name = "ontime_dep")
内容的提问来源于stack exchange,提问作者Sukrit Parinyanusorn
相关产品推荐
相关产品推荐

