gpt4 book ai didi

r - 按照规则集展开数据框

转载 作者:行者123 更新时间:2023-12-04 10:47:43 25 4
gpt4 key购买 nike

我有一个非常复杂的问题,我无法解决。

我有一个在 dplyr 中读取的数据框:

trans_id date       type
9373 2019-09-29 6-months
9945 2019-08-15 3-months
9945 2019-11-13 3-months
9615 2019-12-28 3-months
11465 2019-07-13 3-months
11465 2019-10-11 3-months

可重现的例子:
library(tidyverse)

df <- data.frame(stringsAsFactors=FALSE,
id = c(9373, 9945, 9945, 9615, 11465, 11465),
date = c("2019-09-29", "2019-08-15", "2019-11-13", "2019-12-28",
"2019-07-13", "2019-10-11"),
type = c("6-months", "3-months", "3-months", "3-months", "3-months",
"3-months")) %>%
mutate(date = as.Date(date))

每个 id是一个交易,发生在给定的 date ;每笔交易可以每 3 个月或 6 个月重复一次 - 如 type 中所述.

我要 展开 截至当前日期的月度交易中的这些交易;这意味着第一笔交易 9373 必须重复 6 次,周期为 30 天( type == 6 个月),从 2019-09-29 到当天(今天是 2020-01-07),也就是将只有 4 个单月交易,因为最后两个必须发生。

3 个月的交易也是如此,总是考虑开始日期和当前日期。

最终结果示例:
id      date        type
9373 2019-09-29 6-months # first 6-months cycle transaction
9373 2019-10-29 6-months
9373 2019-11-28 6-months
9373 2019-12-28 6-months
9945 2019-08-15 3-months #
9945 2019-09-14 3-months
9945 2019-10-14 3-months
9945 2019-11-13 3-months #
9945 2019-12-13 3-months
9615 2019-12-28 3-months #

任何帮助表示高度赞赏!

最佳答案

您可以使用 rowwisedo像这样:

df %>% 
rowwise() %>%
do({
p <- as.numeric(gsub('\\D+','',.$type))-1
tibble(
id=.$id,
date=seq(.$date,pmin(Sys.Date(),.$date+p*30),30),
type=.$type
)
}) %>%
ungroup()

# A tibble: 16 x 3
# id date type
# * <dbl> <date> <chr>
# 1 9373 2019-09-29 6-months
# 2 9373 2019-10-29 6-months
# 3 9373 2019-11-28 6-months
# 4 9373 2019-12-28 6-months
# 5 9945 2019-08-15 3-months
# 6 9945 2019-09-14 3-months
# 7 9945 2019-10-14 3-months
# 8 9945 2019-11-13 3-months
# 9 9945 2019-12-13 3-months
# 10 9615 2019-12-28 3-months
# 11 11465 2019-07-13 3-months
# 12 11465 2019-08-12 3-months
# 13 11465 2019-09-11 3-months
# 14 11465 2019-10-11 3-months
# 15 11465 2019-11-10 3-months
# 16 11465 2019-12-10 3-months

关于r - 按照规则集展开数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59625303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com