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

在R中按多条件筛选数据集:保留ABC定植患者最早日期行

R 数据集筛选实现方案

使用dplyr包(推荐,代码简洁直观)

先安装并加载dplyr:

install.packages("dplyr")
library(dplyr)

执行筛选逻辑:

# 处理Disease=ABC且Class=Colonized的记录:按姓名分组保留最早日期的行
abc_colonized_filtered <- df %>%
  filter(Disease == "ABC" & Class == "Colonized") %>%
  group_by(First_Name, Last_Name) %>%
  slice_min(Spec_Date, n = 1) %>%
  ungroup()

# 保留所有其他符合条件的记录
other_records <- df %>%
  filter(Disease != "ABC" | Class == "Clinical")

# 合并得到最终数据集,可选排序对齐示例输出
df2 <- bind_rows(abc_colonized_filtered, other_records) %>%
  arrange(Disease, Class, First_Name, Last_Name)

逻辑说明

  1. 针对Disease=ABC且Class=Colonized的记录,通过group_by按姓名分组,用slice_min提取每组中Spec_Date最早的单行。
  2. 直接筛选两类需保留的记录:非ABC疾病的所有记录,以及ABC疾病但Class为Clinical的记录。
  3. 合并两部分数据并排序,确保结果和示例输出一致。

Base R 实现方案(无需额外包)

# 提取ABC-Colonized子集并筛选最早日期的行
abc_colonized_subset <- df[df$Disease == "ABC" & df$Class == "Colonized", ]
min_date_rows <- aggregate(Spec_Date ~ First_Name + Last_Name, data = abc_colonized_subset, FUN = function(x) which.min(x))
abc_colonized_filtered <- abc_colonized_subset[unlist(min_date_rows$Spec_Date), ]

# 提取其他需保留的记录
other_records <- df[df$Disease != "ABC" | df$Class == "Clinical", ]

# 合并数据并整理格式
df2 <- rbind(abc_colonized_filtered, other_records)
df2 <- df2[order(df2$Disease, df2$Class, df2$First_Name, df2$Last_Name), ]
row.names(df2) <- NULL # 重置行名避免混乱

逻辑说明

  1. 先提取目标子集,用aggregate按姓名分组,找到每组中日期最早的行索引,再提取对应行。
  2. 提取其他符合条件的记录后合并,排序并重置行名,得到和示例一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:30:21