将两个日期之间的行生成到R中的数据框中

Keo*_*ong 3 r data.table

我刚刚开始学习R了很短的时间。我有下表

Name      stDte      edDte  
A    2010-05-01 2014-12-01  
B    2013-06-01 2014-02-01  
Run Code Online (Sandbox Code Playgroud)

我需要将其转换成这样的表

Name   Dte
A      2010-05-01
A      2010-06-01
A      2010-07-01
...
A      2014-12-01
B      2013-06-01
B      2013-07-01
...
B      2014-02-01
Run Code Online (Sandbox Code Playgroud)

我正在考虑将“ for”循环与rbind结合使用,但是我不确定该怎么做。将不胜感激有关如何做到这一点的任何建议。在此先感谢您的指导

Ric*_*ven 6

由于您没有另外说明,因此此答案假定stDteedDte列均为“ Date”类。

在基数R中,您可以Map()用来创建日期序列,然后data.frame在使用创建新Name列之后将新数据框放在一起rep.int()

M <- Map(seq, df$stDte, df$edDte, by = "month")
df2 <- data.frame(
    Name = rep.int(df$Name, vapply(M, length, 1L)), 
    Dte = do.call(c, M)
)    
str(df2)
# 'data.frame':    65 obs. of  2 variables:
#  $ Name: Factor w/ 2 levels "A","B": 1 1 1 1 1 1 1 1 1 1 ...
#  $ Dte : Date, format: "2010-05-01" "2010-06-01" ...
head(df2, 3)
#   Name        Dte
# 1    A 2010-05-01
# 2    A 2010-06-01
# 3    A 2010-07-01
tail(df2, 3)
#    Name        Dte
# 63    B 2013-12-01
# 64    B 2014-01-01
# 65    B 2014-02-01
Run Code Online (Sandbox Code Playgroud)

或者您可以使用data.table包装并做

library(data.table)
setDT(df)[, .(Dte = seq(stDte, edDte, by = "month")), by = Name]
Run Code Online (Sandbox Code Playgroud)