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

如何在R语言中根据年份列获取上一年对应月份的销售额?

解决方案

方法一:使用dplyr的left_join实现匹配

你之前的subset用法有误,正确的思路是先构造用于匹配的辅助数据集,再通过关联键完成左连接。具体步骤如下:

  1. 先加载dplyr包(未安装的话先执行install.packages("dplyr"))
  2. 复制原数据集,将年份加1,同时把销售额列重命名为LastYear
  3. 以Customer_ID和Month为关联键,将原数据集与辅助数据集左连接,匹配对应年份的记录
library(dplyr)

# 构造辅助数据集:年份+1,销售额重命名为LastYear
last_year_sales <- ds4 %>%
  mutate(Year = Year + 1) %>%
  rename(LastYear = Sales)

# 左连接原数据集与辅助数据集
ds5 <- ds4 %>%
  left_join(last_year_sales, by = c("Customer_ID", "Year", "Month"))

执行后得到的ds5会完全符合你的期望:2019年的行LastYear为空,2020年的行自动匹配到2019年同月份的销售额。

方法二:使用data.table的高效匹配(适合大数据集)

如果你的数据集规模较大,用data.table的匹配逻辑会更高效:

library(data.table)

setDT(ds4)
ds4[, LastYear := ds4[.(Customer_ID, Year - 1, Month), on = .(Customer_ID, Year, Month), x.Sales]]

该方法直接在原数据集上新增LastYear列,无需额外创建辅助表,执行效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:50:22