r - 根据索引日期之前和之后的条件生成日期
问题描述
我有一个包含 10,000 多个日期的数据框。例如,
indexdt
01-02-2019
08-15-2019
我需要根据以下条件创建两个数据框-
- 生成日期,以便我得到一周中的同一天,在索引日期之前和之后最多 3 周。输出应该是
Table 1
indexdt dates
01-02-2019 12-26-2018
01-02-2019 12-19-2018
01-02-2019 12-12-2018
01-02-2019 01-09-2019
01-02-2019 01-16-2019
01-02-2019 01-23-2019
08-15-2019 07-25-2019
08-15-2019 08-01-2019
08-15-2019 08-08-2019
08-15-2019 08-22-2019
08-15-2019 08-29-2019
08-15-2019 08-05-2019
- 一周中的同一天,同一个月。输出应该是
Table 2
indexdt date
01-02-2019 01-09-2019
01-02-2019 01-16-2019
01-02-2019 01-23-2019
01-02-2019 01-30-2019
08-15-2019 08-01-2019
08-15-2019 08-08-2019
08-15-2019 08-22-2019
08-15-2019 08-29-2019
解决方案
我已经回答了这两个问题,但你应该在一篇文章中只问一个问题:
library(dplyr)
library(purrr)
library(lubridate)
#Convert to date
df <- df %>% mutate(indexdt = mdy(indexdt))
- 生成日期,以便我得到一周中的同一天,索引日期前后最多 3 周
我们使用seq
分别生成之前和之后的日期。[-1]
用于忽略indexdt
日期,因为我们不希望它出现在最终输出中。
df %>%
mutate(dates = map(indexdt, ~c(seq(.x, length.out = 4, by = -7)[-1],
seq(.x, length.out = 4, by = 7)[-1]))) %>%
unnest(dates)
# indexdt dates
# <date> <date>
# 1 2019-01-02 2018-12-26
# 2 2019-01-02 2018-12-19
# 3 2019-01-02 2018-12-12
# 4 2019-01-02 2019-01-09
# 5 2019-01-02 2019-01-16
# 6 2019-01-02 2019-01-23
# 7 2019-08-15 2019-08-08
# 8 2019-08-15 2019-08-01
# 9 2019-08-15 2019-07-25
#10 2019-08-15 2019-08-22
#11 2019-08-15 2019-08-29
#12 2019-08-15 2019-09-05
- 一周中的同一天,同一个月。
在这里,我们创建了一个从indexdt
日期到月初 ( floor_date
) 的序列和另一个从indexdt
月末到月底 ( ceiling_date - 1
) 的序列。
df %>%
mutate(dates = map(indexdt, ~c(seq(.x, floor_date(.x, 'month'), by = -7)[-1],
seq(.x, ceiling_date(.x, 'month') - 1, by = 7)[-1]))) %>%
unnest(dates)
# indexdt dates
# <date> <date>
#1 2019-01-02 2019-01-09
#2 2019-01-02 2019-01-16
#3 2019-01-02 2019-01-23
#4 2019-01-02 2019-01-30
#5 2019-08-15 2019-08-08
#6 2019-08-15 2019-08-01
#7 2019-08-15 2019-08-22
#8 2019-08-15 2019-08-29
数据
df <- structure(list(indexdt = c("01-02-2019", "08-15-2019")),
class = "data.frame", row.names = c(NA, -2L))
推荐阅读
- javascript - 如何在 useReducer() 和 useContext() 状态管理设置中使用 useEffect() 从 api 获取数据?
- javascript - 在 React 和 TypeScript 中扩展 HTML标签元素
- git - Git中引用名的字母排序,它是如何工作的?
- c++ - 如何将字符串转换为给定精度的双精度?
- java - 使用 ORMLite 时出现死锁
- linux - 使用 xpack 安装 Elasticsearch 失败
- c - 新定义数据类型的 n 个指针的内存分配
- django - 如何将额外的上下文传递给 Django Rest Framework 序列化程序
- firefox - 使用 Firefox 访问 USB 设备
- java - 如何为客户提供自定义密码规则设置机制?