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

在R中的数据框中生成两个日期之间的行,r,data.table,R,Data.table,我刚刚开始学习R一段时间。我有下表 Name stDte edDte A 2010-05-01 2014-12-01 B 2013-06-01 2014-02-01 我需要把它变成这样的桌子 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

我刚刚开始学习R一段时间。我有下表

Name      stDte      edDte  
A    2010-05-01 2014-12-01  
B    2013-06-01 2014-02-01  
我需要把它变成这样的桌子

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

我正在考虑使用“for”循环for与rbind的组合,但我不确定如何进行。如果您能就如何做到这一点提出建议,我们将不胜感激。提前感谢您的指导

,因为您没有另外说明,此回答假设
stDte
edDte
列都是“日期”类

在base R中,您可以使用
Map()
创建日期序列,然后使用
rep.int()
创建新的
Name
列后,使用
rep.int()将新的数据框组合在一起


您可以为每一行构建一系列数据帧,然后将它们绑定在一起。dataframe函数的参数循环属性将根据需要多次重复“名称”的值:

do.call(rbind, 
        lapply(seq(nrow(dat)), function(x){
            data.frame(Name=dat[x,"Name"], 
            Dte=seq(as.Date(dat[x,"stDte"]), 
                    as.Date(dat[x,"edDte"]) ,by="month") ) } ))

欢迎来到SO。你试过什么吗?是的,Richard Scriven的data.table方法正是我所需要的。我没有想到使用seq(stDte,edDte,by='month')、by='Name']向表中添加新行,因为我以前只使用它来聚合行。这是一个反应极快的论坛。我将在这里学到很多东西。
library(data.table)
setDT(df)[, .(Dte = seq(stDte, edDte, by = "month")), by = Name]
do.call(rbind, 
        lapply(seq(nrow(dat)), function(x){
            data.frame(Name=dat[x,"Name"], 
            Dte=seq(as.Date(dat[x,"stDte"]), 
                    as.Date(dat[x,"edDte"]) ,by="month") ) } ))
library(plyr)
ddply(df, .(Name), summarise, Dte = seq(as.Date(stDte), as.Date(edDte), by = "month"))
   Name        Dte
1     A 2010-05-01
2     A 2010-06-01
3     A 2010-07-01
4     A 2010-08-01
5     A 2010-09-01
6     A 2010-10-01
7     A 2010-11-01
8     A 2010-12-01
9     A 2011-01-01
10    A 2011-02-01
11    A 2011-03-01
12    A 2011-04-01
13    A 2011-05-01
14    A 2011-06-01
15    A 2011-07-01
16    A 2011-08-01
17    A 2011-09-01
18    A 2011-10-01
19    A 2011-11-01
20    A 2011-12-01
21    A 2012-01-01
22    A 2012-02-01
23    A 2012-03-01
24    A 2012-04-01
25    A 2012-05-01
26    A 2012-06-01
27    A 2012-07-01
28    A 2012-08-01
29    A 2012-09-01
30    A 2012-10-01
31    A 2012-11-01
32    A 2012-12-01
33    A 2013-01-01
34    A 2013-02-01
35    A 2013-03-01
36    A 2013-04-01
37    A 2013-05-01
38    A 2013-06-01
39    A 2013-07-01
40    A 2013-08-01
41    A 2013-09-01
42    A 2013-10-01
43    A 2013-11-01
44    A 2013-12-01
45    A 2014-01-01
46    A 2014-02-01
47    A 2014-03-01
48    A 2014-04-01
49    A 2014-05-01
50    A 2014-06-01
51    A 2014-07-01
52    A 2014-08-01
53    A 2014-09-01
54    A 2014-10-01
55    A 2014-11-01
56    A 2014-12-01
57    B 2013-06-01
58    B 2013-07-01
59    B 2013-08-01
60    B 2013-09-01
61    B 2013-10-01
62    B 2013-11-01
63    B 2013-12-01
64    B 2014-01-01
65    B 2014-02-01