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

如何从含多日期的DataFrame中筛选最新日期数据?

筛选DataFrame中最新月份的数据

问题背景

我从API下载了一份DataFrame,为实现自动获取最新年月的更新需求,未在API请求列表中指定时间范围,因此返回了所有年月的数据。我仅关注最新月份的条目,已将名为månad的列转换为YYYY-MM-DD格式的Date类型,想找到高效的筛选方法。目前考虑过创建仅含最新日期的新DataFrame再合并,但不确定是否最优。

现有代码

library(pxweb)
library(tidyverse)
library(lubridate)

# PXWEB query - create list
pxweb_query_list_BAS <- 
  list("Region"=c("22"),
       "Kon" =c("1","2"),
       "Alder" =c( "20-24",
                   "25-29",
                   "30-34",
                   "35-39",
                   "40-44",
                   "45-49",
                   "50-54",
                   "55-59",
                   "060-64"),
       "Fodelseregion" = c("in","ut"),
       "ContentsCode"=c("000006IJ"))
       #"Tid" = "2022M09") 

# Download data using created list
px_data_BAS <- 
  pxweb_get(url = "https://api.scb.se/OV0104/v1/doris/sv/ssd/START/AM/AM0210/AM0210A/ArbStatusM",
            query = pxweb_query_list_BAS)


# Convert list to df 
df_arbetskraftd <- as.data.frame(px_data_BAS, column.name.type = "text", variable.value.type = "text")

#Convert class of col. månad from chr (string) to date
df_arbetskraftd$månad <- ym(df_arbetskraftd$månad)

最优解决方案

方法1:dplyr直接筛选(推荐)

利用tidyverse中的dplyr包,一步完成筛选,代码简洁且性能最优:

# 筛选出所有对应最新月份的行
df_latest <- df_arbetskraftd %>%
  filter(månad == max(månad, na.rm = TRUE))

max(månad, na.rm = TRUE)会直接提取månad列的最新日期,filter函数保留所有匹配该日期的记录,无需额外的合并操作,避免冗余步骤。

方法2:Base R实现

如果不依赖tidyverse,用基础R代码也能实现:

# 获取最新日期
latest_month <- max(df_arbetskraftd$månad, na.rm = TRUE)
# 筛选对应数据
df_latest <- df_arbetskraftd[df_arbetskraftd$månad == latest_month, ]

不推荐合并方案的原因

创建新DataFrame再合并的方式会增加不必要的数据拼接步骤,代码冗余的同时,还会占用更多内存(尤其当数据量较大时),直接筛选的方法在效率和简洁性上都更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:10:32