1

現在、R には次のようなエッジ リストがあります。

From  To   Start      End 
A     B    1/1/2011   1/2/2011
A     F    1/1/2011   1/1/2011
B     G    1/2/2011   1/2/2011 
C     A    1/2/2011   1/6/2011
D     C    1/2/2011   1/3/2011

私がやりたいことは、Rで次のような新しいエッジリストを作成することです

From  To   Time
A     B    1/1/2011
A     B    1/2/2011
A     F    1/1/2011
B     G    1/2/2011
C     A    1/2/2011
C     A    1/3/2011
C     A    1/4/2011
C     A    1/5/2011
C     A    1/6/2011
D     C    1/2/2011
D     C    1/3/2011

つまり、最初のテーブルの各行の最初の 2 つの列を、開始日から終了日までの各日 (両端を含む) に複製したいと考えています。これを行うにはどうすればよいでしょうか。助けてくれてどうもありがとう!

4

1 に答える 1

1

Dateクラスには、使用できるseq関数 ( )、またはfrom からseq.Date使用できる関数があります。IDatedata.table

df = read.table(text = 'From  To   Start      End 
A     B    1/1/2011   1/2/2011
A     F    1/1/2011   1/1/2011
B     G    1/2/2011   1/2/2011 
C     A    1/2/2011   1/6/2011
D     C    1/2/2011   1/3/2011', header = T)

library(data.table)
dt = data.table(df)

dt[, cbind(.SD, seq(as.Date(Start, '%m/%d/%Y'),
                as.Date(End, '%m/%d/%Y'), 1)), by = list(Start,End)]

# or
dt[, cbind(.SD, seq(as.IDate(Start, '%m/%d/%Y'),
                    as.IDate(End, '%m/%d/%Y'), 1)), by = list(Start,End)]
#       Start      End From To         V2
# 1: 1/1/2011 1/2/2011    A  B 2011-01-01
# 2: 1/1/2011 1/2/2011    A  B 2011-01-02
# 3: 1/1/2011 1/1/2011    A  F 2011-01-01
# 4: 1/2/2011 1/2/2011    B  G 2011-01-02
# 5: 1/2/2011 1/6/2011    C  A 2011-01-02
# 6: 1/2/2011 1/6/2011    C  A 2011-01-03
# 7: 1/2/2011 1/6/2011    C  A 2011-01-04
# 8: 1/2/2011 1/6/2011    C  A 2011-01-05
# 9: 1/2/2011 1/6/2011    C  A 2011-01-06
#10: 1/2/2011 1/3/2011    D  C 2011-01-02
#11: 1/2/2011 1/3/2011    D  C 2011-01-03
于 2013-08-15T19:03:39.340 に答える