我有一个数据框架df
,有2列和10 k行:
df <-
structure(list(date1 = c("2015-09-29", "2018-07-24", "2021-07-20",
"2016-12-19"), date2 = c("2015-11-26", "2018-09-26", "2021-09-21",
"2017-03-17")), class = "data.frame", row.names = c(NA, 4L))
| 日期1|日期2|
| - -----|- -----|
| 2015-09-29 2015-09-29| 2015-11-26 2015-11-26|
| 2018-07-24| 2018-09-26 2018-09-26|
| 2021-07- 20 2021-07-20 2021-07-20| 2021-09-21 - 2021-09-21|
| 2016-12-19 2016-12-19 2016-12-19| 2017-03-17|
我有一种方法来检索date 1和date 2之间的日期,使用一个循环:
library(lubridate)
p <- list()
for(i in 1:nrow(df)){
p[[i]] <- seq(floor_date(df$date1[i], "months"),
floor_date(df$date2[i], "months"),
by = "months") %m+% months(1) - days(1)
}
因此,这个列表的元素数量与行的数据框一样多,每个元素都有一个向量(可能有不同的长度),向量之间的日期(日期之间是月的最后一天)。
关键是,我试图让它更高效,现在它大约需要1分钟,我知道apply(以及它家族的其他函数)比循环更高效,但它不工作。
我该如何实现这一点?
2条答案
按热度按时间tzcvj98z1#
像这样的吗
pqwbnv8z2#
如果执行时间很重要,请尝试data.table