【发布时间】:2018-12-07 16:34:27
【问题描述】:
我有一个数据框,它有三列employid、开始日期(ydm)和结束日期(ydm)。我的目标是创建另一个具有两列的数据框,一列是员工 ID,另一列是日期。第二个数据框将围绕第一个数据框构建,这样它将从第一个数据框获取 id,并且列日期将占用该员工的开始日期和结束日期之间的所有月份。简而言之,我会根据员工的开始日期和结束日期将第一个数据帧中的数据按月扩展。
我实际上使用 for 循环成功地创建了代码。问题是,它非常慢,而且我读到的一些地方是为了避免 r 中的循环。有没有一种方法可以更快地做到这一点?
我的数据框和代码示例如下:
# Creating Data frame
a<- data.frame(employeeid =c('a','b','c'), StartDate= c('2018-1-1','2018-1-5','2018-11-2'),
EndDate= c('2018-1-3','2018-1-9','2018-1-8'), stringsAsFactors = F)
a$StartDate <- ydm(a$StartDate)
a$EndDate <- ydm(a$EndDate)
#second empty data frame
a1 <-a
a1 <- a1[0,1:2]
#my code starts
r <- 1
r.1 <- 1
for (id in a$employeeid) {
#r.1 <- 1
for ( i in format(seq(a[r,2],a[r,3],by="month"), "%Y-%m-%d") ) {
a1[r.1,1] <- a[r,1]
a1[r.1,2] <- i
r.1 <- r.1 +1
}
r <- r+1
}
这会导致:
我想要同样的结果,但要快一点
【问题讨论】:
-
刚刚编辑,YMD或YDM也不是问题,可以随时更改