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

如何在R语言中基于最新观测值和日期行筛选并创建新数据库

保留每个Name对应最新记录的解决方案

问题场景

有超过1000行的数据库,需剔除冗余行,仅保留每个Name对应Year最新的记录。

原始数据

NameYearWeight
John2021-04-03203
John2022-08-02198
John2018-08-34234
Patrick2014-05-09176
Patrick2021-03-09199
Patrick2020-09-03200
Peter2019-09-05204
Peter2017-07-14209
Peter2019-10-05199

目标结果

NameYearWeight
John2022-08-02198
Patrick2021-03-09199
Peter2019-10-05199

一、Excel 手动操作(适合非编程用户)

  1. 排序:选中全量数据(含表头),点击「数据」→「排序」,设置:
    • 主要关键字:Name(升序)
    • 次要关键字:Year(降序)
      这样每个Name的最新记录会排在组内第一行
  2. 去重:选中Name列,点击「数据」→「删除重复值」,仅勾选Name列后确定。重复的旧记录会被删除,最终保留每组第一条最新记录

二、Python Pandas 代码(适合大数据量高效处理)

import pandas as pd

# 读取数据(替换为你的数据源路径,比如CSV/Excel/数据库连接)
df = pd.read_csv('your_data.csv')

# 转换日期格式,自动处理无效日期(如示例中的2018-08-34会转为空值)
df['Year'] = pd.to_datetime(df['Year'], errors='coerce')

# 按Year降序排序,分组后取每组第一条(即最新记录)
latest_df = df.sort_values('Year', ascending=False).groupby('Name').head(1)

# 重置索引并保存结果
latest_df = latest_df.reset_index(drop=True)
latest_df.to_csv('latest_records.csv', index=False)

三、SQL 查询(适合数据存储在数据库中)

针对MySQL、SQL Server等数据库,直接执行以下语句提取最新记录:

SELECT t1.*
FROM your_table t1
INNER JOIN (
    -- 先获取每个Name的最新年份
    SELECT Name, MAX(Year) AS latest_year
    FROM your_table
    GROUP BY Name
) t2 
ON t1.Name = t2.Name AND t1.Year = t2.latest_year;

如果同一Name在同一年份有多条记录,可根据需求添加额外筛选条件(如MAX(Weight))。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:09:56