如何在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
相关产品推荐
相关产品推荐

