2013-07-11 73 views
1

我遇到了計算列表中日期差異的問題。我將開發我的問題有兩點:日期列表之間的區別

我有日期的向量。我希望能夠找到彼此之間每個日期之間的差異。 例如,在date1和date2之間,然後是date2和3,然後是3和4 ... 由於strptime函數似乎僅適用於兩個日期,我如何計算這些日期之間的天數差異?

[1] "2011-10-06" "2011-09-28" "2011-09-20" "2011-08-29" "2011-09-09" "2011-08-16" 
[7] "2011-08-05" "2011-07-28" "2011-07-18" "2011-07-06" "2011-06-27" "2011-06-17" 
[13] "2011-06-03" "2011-05-22" "2011-05-02" "2011-05-12" "2011-04-21" "2011-04-11" 
[19] "2011-04-01" "2011-03-23 

2.

這些日期都包含在像這樣的列表:

$ 2008: chr [1:17] "2008-05-22" "2008-05-30" "2008-06-09" "2008-06-18" ... 
$ 2003: chr [1:23] "2003-04-24" "2003-05-15" "2003-05-23" "2003-06-05" ... 
$ 2005: chr [1:22] "2005-04-22" "2005-05-07" "2005-05-14" "2005-05-22" ... 
$ 2006: chr [1:24] "2006-04-14" "2006-04-19" "2006-05-03" "2006-05-11" ... 
$ 2007: chr [1:15] "2007-06-15" "2007-04-27" "2007-05-11" "2007-05-22" ... 
$ 2004: chr [1:20] "2004-05-18" "2004-06-04" "2004-06-09" "2004-06-18" ... 
$ 2009: chr [1:19] "2009-05-05" "2009-05-19" "2009-05-29" "2009-06-10" ... 
$ 2010: chr [1:18] "2010-09-28" "2010-09-20" "2010-09-10" "2010-09-01" ... 
$ 2011: chr [1:20] "2011-10-06" "2011-09-28" "2011-09-20" "2011-08-29" ... 

我怎麼可能的答案適用於之前的問題每個THES的對象?

我希望我的問題已經夠清楚了!

謝謝!

+1

你可以使用'diff'和'lap ply' – user1609452

回答

2

無需lapply,只是unlist並使用diff這對於Date類對象的方法...

dates <- as.list(c("2011-10-06","2011-09-28","2011-09-20","2011-08-29","2011-09-09","2011-08-16","2011-08-05","2011-07-28","2011-07-18","2011-07-06","2011-06-27","2011-06-17","2011-06-03","2011-05-22","2011-05-02","2011-05-12","2011-04-21","2011-04-11","2011-04-01","2011-03-23")) 

diff(as.Date(unlist(dates))) 
#Time differences in days 
# [1] -8 -8 -22 11 -24 -11 -8 -10 -12 -9 -10 -14 -12 -20 10 -21 -10 -10 -9 
+0

感謝您的回答,它運作良好! – user2542995

1

您可以使用filter也:

filter(dt,c(1,-1)) 

例如:

dt <- scan(text='"2011-10-06" "2011-09-28" "2011-09-20" "2011-08-29" "2011-09-09" "2011-08-16" 
"2011-08-05" "2011-07-28" "2011-07-18" "2011-07-06" "2011-06-27" "2011-06-17" 
"2011-06-03" "2011-05-22" "2011-05-02" "2011-05-12" "2011-04-21" "2011-04-11" 
"2011-04-01" "2011-03-23"',what='chracter') 
dt <- as.Date(dt) 
filter(dt,c(1,-1)) 
Time Series: 
Start = 1 
End = 20 
Frequency = 1 
[1] -8 -8 -22 11 -24 -11 -8 -10 -12 -9 -10 -14 -12 -20 10 -21 -10 -10 -9 NA 
相關問題