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

如何在R中按id对data frame取子集,每个id仅采样1行?

DataFrame按id列去重(每个id仅保留1行)实现方案

你可以根据使用的工具选择对应实现方法:

Python Pandas 实现

  • 基础通用方法,直接调用drop_duplicates方法即可,默认保留每个id第一次出现的行:
df_unique = df.drop_duplicates(subset="codigo_pon", keep="first")
  • 参数调整说明:
    • 若要保留每个id最后一次出现的行,将keep参数改为"last"
    • 若不需要保留原df,可添加inplace=True参数直接修改原对象,节省内存
  • 大体量DataFrame优化方案:如果数据量极大内存占用较高,可以先提取待保留的索引再过滤,减少中间内存开销:
# 先获取所有唯一id的首次出现行索引
keep_idx = df["codigo_pon"].drop_duplicates(keep="first").index
# 按索引过滤得到去重结果,重置行索引
df_unique = df.loc[keep_idx].reset_index(drop=True)

R 语言实现

  • 使用dplyr包的distinct方法实现:
library(dplyr)
# 按codigo_pon去重,保留所有列
df_unique <- df %>% distinct(codigo_pon, .keep_all = TRUE)

注意:如果需要保留每个id满足特定规则的行(如数值最大、时间最新等),可以先按照对应字段排序后再执行去重操作,此时keep="first"会默认保留排序后优先级最高的行。


内容的提问来源于stack exchange,提问作者João Reis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:57:00