You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 01:07:20