2014-12-22 50 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向量转换为字符。