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

如何用dplyr为各订阅服务生成所有月度付款日期?

使用dplyr生成订阅服务的月度付款日期

你可以结合dplyr的行处理功能,搭配lubridate的日期运算函数实现需求。核心逻辑是为每一条订阅数据生成对应数量的月度日期序列,再将序列展开为多行记录。

实现步骤

  • 用rowwise()对每一行数据单独处理
  • 借助lubridate::add_months()生成从首次付款日开始的月度日期序列
  • 用tidyr::unnest()将日期列表展开为多行结构

完整代码示例

首先加载所需工具包:

library(dplyr)
library(lubridate)
library(tidyr)

构造示例数据框:

subscriptions <- tibble(
  Subscription = c("Netflix", "Spotify", "PureGym", "DisneyPlus", "AmazonPrime", "Youtube"),
  MonthlyPayment = c(12.99, 9.99, 19.99, 7.99, 34.99, 12.99),
  FirstPaymentDate = ymd(c("2021-05-24", "2021-08-17", "2022-07-04", "2020-10-26", "2020-08-11", "2020-09-27")),
  NumberofPayments = c(21, 7, 9, 11, 73, 35)
)

生成付款日期:

payment_dates <- subscriptions %>%
  rowwise() %>%
  mutate(PaymentDate = list(add_months(FirstPaymentDate, 0:(NumberofPayments - 1)))) %>%
  unnest(PaymentDate) %>%
  ungroup()

结果说明

处理后的数据框会为每个订阅生成对应数量的付款日期行,比如Netflix会生成21行,每行对应一个从2021-05-24开始的月度付款日。如果遇到月末特殊日期(如首次付款日为31号,部分月份无31号),add_months会自动调整为当月最后一天,符合实际订阅付款的常见规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:57:41