能否使用dplyr的reframe复现旧版summarize的行为?
用reframe复现旧版summarize+unique的行为
完全可以实现,核心就是让每组只返回一个结果——优先取非NA的唯一值,没有非NA值就返回NA。
方法一:适配通用场景
如果数据里部分组可能存在多个不同的非NA值(旧版summarize会返回第一个出现的唯一值),可以用这个写法:
t <- buttons %>% group_by(envIndex, predIndex) %>% dplyr::reframe( predatorLocation = { non_na_vals <- unique(na.omit(predatorLocation)) if (length(non_na_vals) > 0) non_na_vals[1] else NA } )
方法二:简化版(适合组内非NA值无重复的场景)
如果业务逻辑里每组的非NA值本身就是唯一的(不会出现多个不同的非NA值),直接用first()配合默认值更简洁:
t <- buttons %>% group_by(envIndex, predIndex) %>% dplyr::reframe( predatorLocation = first(na.omit(predatorLocation), default = NA) )
逻辑说明
na.omit(predatorLocation):先剔除组内的NA值,只保留有效数据unique():对有效数据去重,对应旧代码里的unique操作- 条件判断/
first():确保每组只返回一个值,有有效数据就取第一个(和旧版summarize行为一致),没有就返回NA
内容的提问来源于stack exchange,提问作者BCole
相关产品推荐
相关产品推荐

