当尝试根据某个POSIXct日期和时间之前或之后的日期对数据进行子集时,我得到了不一致的结果。当我像这样制作一串日期时:
myDates <- c(as.POSIXct("2014-12-27 08:10:00 UTC"),
as.POSIXct("2014-12-27 08:15:00 UTC"),
as.POSIXct("2014-12-27 09:30:00 UTC"))
然后尝试子集以查找myDates
中2014年12月27日上午8:15之前的所有条目,如下所示:
myDates[myDates < as.POSIXct("2014-12-27 08:15:00")]
工作正常,我得到了
"2014-12-27 08:10:00 PST"
(虽然我不明白为什么它为时区说“PST”;那就是我,但我把它设置为UTC)。
但是,我的原始日期和时间数据是在Excel中,它们是数字格式。我将它们作为一个名为Samples的data.frame导入,并通过执行以下操作将日期和时间列转换为POSIXct格式:
as.POSIXct(Samples$DateTime, origin = "1970-01-01", tz = "UTC")
现在,我正在对这些日期的分组进行扯皮,头上desk frust frust的挫败感。特别记录一个日期x <- Samples$DateTime[34]
,根据输出R给出的"2014-12-27 08:10:00 UTC"
。 x < as.POSIXct("2014-12-27 08:15:00 UTC")
TRUE
。如果我检查x&lt; 2014-12-27 08:15,那应该是真的,这就是我所看到的:
X < as.POSIXct("2014-12-27 08:09:00 UTC")
TRUE
但是x不应该少于2014-12-27 8:09:00 UTC,对吗?这就是我所看到的:
#ifdef DEBUG
#import <UIKit/UIKit.h>
#import <objc/runtime.h>
@implementation UIView (FixViewDebugging)
+ (void)load
{
Method original = class_getInstanceMethod(self, @selector(viewForBaselineLayout));
class_addMethod(self, @selector(viewForFirstBaselineLayout), method_getImplementation(original), method_getTypeEncoding(original));
class_addMethod(self, @selector(viewForLastBaselineLayout), method_getImplementation(original), method_getTypeEncoding(original));
}
@end
#endif
为什么,为了皮特的爱,R告诉我8:10 8:09之前是?对于我刚才输入的数据,这似乎不是问题,仅适用于我从Excel导入的数据。
答案 0 :(得分:2)
您可能需要先在同一时区内获取所有内容。试试
as.numeric(as.POSIXct("2014-12-27 08:10:00 UTC", tz="UTC"))
#[1] 1419667800
# equivalent to "2014-12-27 08:10:00 UTC"
VS
as.numeric(as.POSIXct("2014-12-27 08:10:00 UTC"))
#[1] 1419631800
# equivalent to 8:10 in local timezone - in my case Aust. EST.
# "2014-12-27 08:10:00 AEST"
你可以看到它们实际上在数字上是不同的。
要解决此问题,请在导入时明确指定tz=
,因为输入时不会检测到文本字符串中的"UTC"
。
答案 1 :(得分:0)
另外,要非常小心变量名称。可能你只是在这里输入了它,但是在问题的描述和你使用x
的第一个逻辑比较中,在第二个中使用了X
。
R区分大小写,因此不会将您的日期与x
中存储的日期进行比较。如果其他任何内容与X
一起存储在内存中,实际上可能是您为所提问题提供了正确的答案。