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

如何按name、clinic、year分组,条件式mutate()统一tested列取值?

数据集处理解决方案

需求

  1. 按name、clinic、year分组,若组内存在tested值为yes的行,将该组所有行的tested统一设为yes
  2. 基于处理后的结果,为每个name+clinic+year组合仅保留一行数据

示例原始数据

nameclinicyeardatetested
patientxxxy2022四月yes
patientxxxy2022五月no
patientxyggf2019一月no
patientxyggf2019二月yes
patientxyzffr2018三月yes
patientxyzffr2019五月no

处理代码(R + dplyr)

library(dplyr)

# 构造示例数据集
df <- tibble(
  name = c("patientx", "patientx", "patientxy", "patientxy", "patientxyz", "patientxyz"),
  clinic = c("xxy", "xxy", "ggf", "ggf", "ffr", "ffr"),
  year = c(2022, 2022, 2019, 2019, 2018, 2019),
  date = c("四月", "五月", "一月", "二月", "三月", "五月"),
  tested = c("yes", "no", "no", "yes", "yes", "no")
)

# 执行数据处理
processed_df <- df %>%
  # 第一步:分组统一tested字段值
  group_by(name, clinic, year) %>%
  mutate(tested = if_else(any(tested == "yes"), "yes", tested)) %>%
  ungroup() %>%
  # 第二步:按分组保留一行(此处保留最早日期的行,可按需调整)
  group_by(name, clinic, year) %>%
  slice_min(date, n = 1) %>%
  ungroup()

处理后结果

nameclinicyeardatetested
patientxxxy2022四月yes
patientxyggf2019一月yes
patientxyzffr2018三月yes
patientxyzffr2019五月no

说明

  • 若需要保留分组内最晚日期的行,将slice_min(date)替换为slice_max(date)即可
  • 也可根据其他自定义逻辑选择保留的行,比如使用filter()筛选特定条件

内容的提问来源于stack exchange,提问作者Vicki Latham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:37:34