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

如何在R(dplyr)中筛选最后和倒数第二个观测值的所有行

筛选数据框中倒数两个月份的行(R语言)

数据框定义

data <- structure(list(Version = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L), levels = c("Nov 2022", "Jan 2023", "Mar 2023", "May 2023", 
"Jul 2023"), class = "factor")), row.names = c(NA, -40L), class = c("tbl_df", 
"tbl", "data.frame"))

需求

需要动态筛选数据框中最后一个和倒数第二个月份的所有行(本例中对应May 2023和Jul 2023),目前仅能通过last()筛选最后一个月份,需调整代码实现同时筛选两个月份。

解决方案

因为Version是有序因子,可直接利用因子顺序或提取唯一月份值实现动态筛选,以下是几种可行方法:

方法1:结合last()与nth()函数

用nth(Version, n=-2)定位倒数第二个月份,同时匹配最后一个和倒数第二个月份:

library(tidyverse)

data %>% 
  filter(Version %in% c(last(Version), nth(Version, n = -2)))

方法2:提取唯一月份后取最后两个

先获取所有唯一的Version值,再取最后两个进行匹配,适配性更强,即使数据中月份有重复也能正确识别:

data %>% 
  filter(Version %in% tail(unique(Version), 2))

方法3:基于因子水平索引

利用因子的水平属性,直接选取最后两个水平:

data %>% 
  filter(Version %in% levels(Version)[tail(seq_along(levels(Version)), 2)])

以上三种方法均无需硬编码月份名称,可动态适配不同的月份数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:55:07