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

如何移除DataFrame中因过滤丢失首次记录的个体?

高效移除因过滤丢失首次记录的个体

核心思路

先识别出首次操作记录年份为2013年的个体,再从2013年的操作记录中仅保留这类个体的数据,以此自动排除那些首次记录被过滤掉的个体(如示例中的Person_ID=123)。


方法一:使用dplyr(适合中等规模数据集)

library(dplyr)
library(lubridate)

# 转换日期格式并提取年份
df_clean <- df %>%
  mutate(Procedure_Date = mdy(Procedure_Date),
         year = year(Procedure_Date))

# 筛选出首次记录年份为2013的个体ID
valid_persons <- df_clean %>%
  group_by(Person_ID) %>%
  summarize(first_year = min(year)) %>%
  filter(first_year == 2013) %>%
  pull(Person_ID)

# 生成最终数据集
final_df <- df_clean %>%
  filter(year == 2013, Person_ID %in% valid_persons)

# 查看结果
dput(final_df)

方法二:使用data.table(适合超大规模数据集)

data.table的操作效率远高于基础R和dplyr,更适合处理百万级以上的大表:

library(data.table)
library(lubridate)

# 转换为data.table格式
setDT(df)

# 处理日期并提取年份
df[, Procedure_Date := mdy(Procedure_Date)][, year := year(Procedure_Date)]

# 筛选符合条件的个体ID
valid_persons <- df[, .(first_year = min(year)), by = Person_ID][first_year == 2013, Person_ID]

# 生成最终数据集
final_df <- df[year == 2013 & Person_ID %in% valid_persons]

# 查看结果
dput(final_df)

运行上述代码后,最终得到的final_df将只保留Person_ID=444的2013年记录,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:02:30