2014-01-08 48 views
0

我有一個巨大的載體是這樣的:使用水平數據子集

12/06/2000  15/07/2001  17/01/2002  25/03/2005  22/05/2005  
17/01/2006  13/03/2006  05/02/2007  12/02/2008  
4814 Levels: 01/01/2000 01/01/2001 01/01/2002 01/01/2003 01/01/2004 01/01/2005 ... 

我能子集上使用提供給我的級別不同時期的載體?因此,例如,如果我選擇01/01/2000直到2001年1月31日,R將只給出與2000年有關的觀察值。

對任何讀這個的人都有一點警告:as.Date(levels(a),「 %d /%m /%Y「)根據我提供的格式給出日期。

+0

在這個例子中,你只想要2000,或僅一月-2000:對於任何的分揀解決方案? – jlhoward

+0

在這個特定的情況下,它有點多餘,因爲在這個小樣本中只有一個觀察2000,但是說我想要2005年它會給我2005年3月25日和22/05/2005 – user3083324

回答

0

一般無,水平不能保證排序。因此,如果您使用範圍的水平,您可能會獲得所需範圍的原始數據以外的數據。如果在你的特定情況下,你確保水平正確排序然後是。

編輯

a = factor(c("2013-12-21","2011-11-28","2000-10-15","2005-08-08","2000-12-31")) 

dlevels = as.Date(levels(a)) 
lindex = which(dlevels >= as.Date("2000-01-01") & dlevels <= as.Date("2000-12-31")) 
b = a[[email protected] %in% lindex] 

> a 
[1] 2013-12-21 2011-11-28 2000-10-15 2005-08-08 2000-12-31 
Levels: 2000-10-15 2000-12-31 2005-08-08 2011-11-28 2013-12-21 
> b 
[1] 2000-10-15 2000-12-31 
Levels: 2000-10-15 2000-12-31 2005-08-08 2011-11-28 2013-12-21 
+0

我該如何排序? – user3083324

+0

你不能。正如你所說,它們是通過提供數據的任何函數給你的。您只能檢查它們是否正確排序(意思是:根據您想要的排序順序,例如按時排序)。通常情況下,除非您的數據最初被排序,否則情況並非如此。但是,如果對它們進行了排序,則它們的索引是存儲在datavector中的整數值,因此您可以使用這些索引切片該整數向量。從這裏開始,我會建議你做你自己的想法:) –

+0

你認爲這項工作足夠快嗎? http://stackoverflow.com/questions/9749598/r-obtaining-month-and-year-from-a-date – user3083324

0

你可能需要做這樣的事情(未測試的代碼) -

a[strftime(as.Date(as.character(a),'%d/%m/%Y'),'%Y') == '2000'] 
+0

不起作用其他年份 – user3083324

+0

即使這是正確的,它會在一個大型數據集上非常緩慢(downvote) –

+0

那麼你建議什麼先生嗎? – user3083324