2014-12-22 51 views
-1

我有一個數據幀,其日期格式爲YYYY/MM/DD。我試圖在兩個方面subseting,並得到不同的值:與R中的子集數據不一致的結果

方法1:

a <- mydata[(mydata$Date > 2010-01-01),] 

結果:

這給了我結果,其中包括在日期2008年,2009年等

方法2:

a <- mydata[(mydata$Date > 2010/01/01),] 

結果:

這給了我正確的結果。如你所見,不同之處在於我對日期進行格式化 - 「/」和「 - 」。有人能向我解釋有什麼不同嗎?數據框中的日期本身的格式爲YYYY-MM-DD,這就是爲什麼我在方法1中使用連字符的原因。

+0

最初他們是因素,我將它們改爲日期 –

+7

這兩種方法都不能使用適當的日期值(或至少不以您期望的方式)。如果你在樣本輸入中包含一個[可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a- great-r-reproducible-example),那麼這將會很有幫助,因此我們可以複製行爲。一個適當的比較看起來像'a < - mydata [(mydata $ Date> as.Date(「2010-01-01」)],' – MrFlick

+0

明白了,謝謝大家! –

回答

1

如果您的日期是字符值(而不是因素或日期,但打印到控制檯),那麼你可以使用「>」或「<」或「==」,但這樣做需要引用該值的表達式。否則,你只會得到的

> 2010-01-01 
[1] 2008 

沒有錯誤將被拋出,因爲你可以比較數字和特徵向量的運算值,但結果不會根據自己的喜好:

> 2010-01-01 > "2007-01-01" 
[1] TRUE 

所以是安全的,得到有意義的結果,試試這個:

asub <- mydata[(as.character(mydata$Date > "2010-01-01"), ] 

as.character要麼因子(或日期)-classed向量轉換爲字符。