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

如何自动选取R数据框中含日期列名的最新两列?

问题描述

每周需手动生成报告,希望实现自动化。现有R数据框p_wide,每周会新增一列,列名包含对应日期,示例数据如下:

id   col_2022_09_04   col_2022_09_11   col_2022_09_18   col_2022_09_25
---  --------------   --------------   --------------   --------------
01        0.3               0.8              0.9              0.1
02        0.6               0.1              0.4              0.5
03        0.2               0.1              0.3              0.4
04        0.1               0.7              0.4              0.9

当前手动筛选代码如下:

p_mover <- p_wide %>% filter(abs(col_2022_09_18 - col_2022_09_25) > .33)

需求:无需手动输入列名,自动选取最新的两列完成筛选。

解决方案

方法一:基于列名提取日期(更可靠,不受列顺序影响)

如果列名的日期格式固定为col_YYYY_MM_DD,可以提取日期部分排序,获取最新的两个列名:

library(dplyr)
library(stringr)

# 提取除id外的所有列名
date_cols <- setdiff(names(p_wide), "id")

# 提取日期字符串并转为日期格式,排序后取最新两个
latest_two_cols <- date_cols %>%
  str_extract("\\d{4}_\\d{2}_\\d{2}") %>%  # 提取YYYY_MM_DD格式的日期片段
  as.Date(format = "%Y_%m_%d") %>%
  sort(decreasing = TRUE) %>%
  head(2) %>%
  paste0("col_", .)  # 还原为完整列名

# 执行筛选
p_mover <- p_wide %>%
  filter(abs(.data[[latest_two_cols[1]]] - .data[[latest_two_cols[2]]]) > 0.33)

方法二:按列位置取最后两列(简洁,需保证新增列始终在末尾)

如果每周新增的列总是添加在数据框的最后一列,可直接用列位置选取:

library(dplyr)

p_mover <- p_wide %>%
  filter(abs(last_col() - nth(cols(), ncol(.) - 1)) > 0.33)
  • last_col():选取最后一列(最新的日期列)
  • nth(cols(), ncol(.) - 1):选取倒数第二列(上一周的日期列)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:50:28