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

如何在R语言中获取指定月份的上月?含dataframe示例及lubridate问询

用R获取每个月份的上月(附lubridate实现方法)

当然可以搞定这个需求!lubridate包是处理日期时间的利器,用它来实现月份的偏移非常方便。我给你两种可行的方法,你可以根据自己的场景选择:

方法一:用lubridate处理日期偏移

这个方法的思路是先把月份字符串转成完整的日期(随便选一个年份就行,因为我们只关心月份的相对关系),然后减去一个月,最后提取上月的名称。

首先准备你的数据:

library(tidyverse)
library(lubridate)

# 你的原始数据框
df <- tibble(Month1 = c("December", "October", "April", "February", "January"))

然后执行转换:

df <- df %>%
  mutate(
    # 将月份字符串转为日期(这里选2023年,任意年份都不影响结果)
    date_obj = dmy(paste0("01-", Month1, "-2023")),
    # 减去1个月,%m-% 是lubridate专门处理月份偏移的运算符,避免跨年份的问题
    prev_month_date = date_obj %m-% months(1),
    # 提取上月的完整月份名称
    Month2 = month(prev_month_date, label = TRUE, abbr = FALSE)
  ) %>%
  # 保留需要的列
  select(Month1, Month2)

运行后你会得到想要的结果:

print(df)
#> # A tibble: 5 × 2
#>   Month1   Month2  
#>   <chr>    <ord>   
#> 1 December November
#> 2 October  September
#> 3 April    March   
#> 4 February January 
#> 5 January  December

方法二:手动创建月份映射表

如果你的需求只是单纯的月份对应关系,不需要处理实际日期,直接做一个映射表会更简单高效:

# 创建月份映射:键是当前月份,值是上月
month_mapping <- setNames(
  c("December", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November"),
  month.name
)

# 直接匹配映射
df <- df %>%
  mutate(Month2 = month_mapping[Month1])

这个方法不需要加载lubridate,代码更简洁,结果和上面完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:32:37