gpt4 book ai didi

r - 在数据框中的两个日期之间生成日期

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

下面是输入和输出。我想将数据帧从输入格式转换为输出格式。

我现在已经写了一段代码。它可以完成工作。但我认为这是非常低效的。有没有更好的包或函数可以处理这个问题?

我的代码:

#create a output data frame to be apended later
output = data.frame(id1 = character(0), id2 = character(0), dates = character(0))

# for loop to get all possible combiation of dates

for (i in c(1:nrow(input))) {
end = as.Date('2016-07-18')
len = as.numeric(end-input$min_date[i])
output = rbind(output, as.data.frame(cbind(
pid = rep(input$id1[i],len),
cid = rep(input$id2[i],len),
dates = as.character(seq(input$min_date[i], end, by='day'))
)
)
)

}

输入:
+------+--------+------------+------------+
| id1 | id2 | min_date | max_date |
+------+--------+------------+------------+
| 3575 | 155443 | 2012-06-18 | 2016-07-18 |
| 3575 | 155450 | 2012-06-12 | 2016-07-18 |
+------+--------+------------+------------+

输出:
+------+--------+------------+
| id1 | id2 | dates |
+------+--------+------------+
| 3575 | 155443 | 2012-06-18 |
| 3575 | 155443 | 2012-06-19 |
| 3575 | 155443 | 2012-06-20 |
| 3575 | 155443 | .. |
| 3575 | 155443 | … |
| 3575 | 155443 | 2016-07-18 |
| | | |
| 3575 | 155450 | 2012-06-12 |
| 3575 | 155450 | 2012-06-13 |
| 3575 | 155450 | 2012-06-14 |
| 3575 | 155450 | … |
| 3575 | 155450 | … |
| 3575 | 155450 | 2016-07-18 |
+------+--------+------------+

最佳答案

假设 'min_date/max_date' 列是 Date类,我们使用 Maplist 中获取每个“min_date”与相应“max_date”的序列, 用 list 的行数复制 'df1' 的行序列元素,创建一个 data.frame通过基于“i1”扩展数据集并通过连接“lst”元素来创建“日期”。

lst <- Map(function(x, y) seq(x,y, by = "1 day"), df1$min_date, df1$max_date)
i1 <- rep(1:nrow(df1), lengths(lst))
data.frame(df1[i1,-3], dates = do.call("c", lst))

或者如果我们使用 dplyr
library(dplyr)
df1 %>%
rowwise() %>%
do(data.frame(.[1:2], date = seq(.$min_date, .$max_date, by = "1 day")))

或使用 data.table ,我们可以在一行代码中做到这一点
library(data.table) 
setDT(df1)[,.(date = seq(min_date, max_date, by = "1 day")) ,.(id1, id2)]

关于r - 在数据框中的两个日期之间生成日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39247023/

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