我正在努力使用R脚本在同一列中的两个日期之间生成日期序列。
我有请求ID和序列ID,日期和状态。 Input table
我的要求是生成这样的表格。 desired output table
在这方面的任何帮助将不胜感激。
谢谢
答案 0 :(得分:3)
您可以使用tidyverse
库执行此操作。首先将您的日期列设置为dmy
包中lubridate
的日期。然后,您可以使用tidyr
函数complete
和fill
来扩展数据表,如图所示。 complete
可以选择在白天填补空白。 group_by
请求为每个单独的标识符执行此操作。
library(tidyverse)
library(lubridate)
df <- data_frame(ReqID = 100, ID_Seq = 1:3, Created = dmy("01/01/2018","10/01/2018","18/01/2018"), Status = c("Scheduled","In Execution", "Completed"))
df %>%
group_by(ReqID) %>%
complete(Created = seq.Date(min(Created),max(Created), by = "day")) %>%
fill(ReqID,ID_Seq,Status)
## A tibble: 18 x 4
# Created ReqID ID_Seq Status
# <date> <dbl> <int> <chr>
# 1 2018-01-01 100 1 Scheduled
# 2 2018-01-02 100 1 Scheduled
# 3 2018-01-03 100 1 Scheduled
# 4 2018-01-04 100 1 Scheduled
# 5 2018-01-05 100 1 Scheduled
# 6 2018-01-06 100 1 Scheduled
# 7 2018-01-07 100 1 Scheduled
# 8 2018-01-08 100 1 Scheduled
# 9 2018-01-09 100 1 Scheduled
#10 2018-01-10 100 2 In Execution
#11 2018-01-11 100 2 In Execution
#12 2018-01-12 100 2 In Execution
#13 2018-01-13 100 2 In Execution
#14 2018-01-14 100 2 In Execution
#15 2018-01-15 100 2 In Execution
#16 2018-01-16 100 2 In Execution
#17 2018-01-17 100 2 In Execution
#18 2018-01-18 100 3 Completed
答案 1 :(得分:0)
谢谢Jasbner!我按照建议安装了dplyr和tidyr软件包。 我正在使用'mutate'来修复日期格式。
ReqID Seq Created Status
100 1 01/01/2018预定
100 2 10/01/2018执行
100 3 15/01/2018等待
100 4 18/01/2018完成
101 1 10/01/2018预定
101 2 18/01/2018执行
101 3 20/01/2018完成
102 1 18/01/2018预定
102 2 22/01/2018执行
102 3 25/01/2018已取消
103 1 01/02/2018预定
mydata&lt; -read.csv('file.csv')#从csv读取数据
myindf&lt; -as.data.frame(mydata)#将其转换为数据框
myoutdf&lt; - myindf%&gt;%mutate(Created = dmy(Created))%&gt;%group_by(ReqID)%&gt;%complete(Created = seq.Date(min(Created),max(Created) ,by =“day”))%&gt;%fill(ReqID,Seq,Status)
print(myoutdf,n = 38)#print all 38行