以下是输入和输出。我想将一个数据帧从输入格式转换为输出格式。
我现在写了一段代码,它可以完成任务。但我认为它非常低效。是否有更好的包或函数可以处理这个问题?
我的代码:
我现在写了一段代码,它可以完成任务。但我认为它非常低效。是否有更好的包或函数可以处理这个问题?
我的代码:
#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 |
+------+--------+------------+