29

我有一个名为EPL2011_12. 我想通过按日期对原始数据集进行子集来制作新的数据集。日期位于名为Date 日期的列中,格式为 DD-MM-YY。

我努力了

EPL2011_12FirstHalf <- subset(EPL2011_12, Date > 13-01-12)

EPL2011_12FirstHalf <- subset(EPL2011_12, Date > "13-01-12")

但每次都会收到此错误消息。

Warning message:
In Ops.factor(Date, 13- 1 - 12) : > not meaningful for factors

我想这意味着 R 正在处理文本而不是数字,为什么它不起作用?

4

2 回答 2

49

好吧,它显然不是一个数字,因为它有破折号。错误消息和两条评论告诉您这是一个因素,但评论员显然正在等待并让消息进入。Dirk 建议您这样做:

 EPL2011_12$Date2 <- as.Date( as.character(EPL2011_12$Date), "%d-%m-%y")

之后你可以这样做:

 EPL2011_12FirstHalf <- subset(EPL2011_12, Date2 > as.Date("2012-01-13") )

R 日期函数假定格式为“YYYY-MM-DD”或“YYYY/MM/DD”。您确实需要比较类似的类:日期到日期或字符到字符。而且,如果您要逐个字符进行比较,那么只有日期采用 YYYYMMDD 格式(如果使用任何分隔符,则使用相同的分隔符),它才会成功。

于 2013-01-23T03:08:55.583 回答
6

您应该对日期变量做的第一件事是确认 R 将其读取为日期。为此,对于名为 Date 的变量(即向量/列),在名为 EPL2011_12 的数据框中,输入

class(EPL2011_12$Date)

输出应为 [1]“日期”。如果没有,您应该通过输入将其格式化为日期

EPL2011_12$Date <- as.Date(EPL2011_12$Date, "%d-%m-%y")

请注意,上述日期格式中的连字符(“%d-%m-%y”)也可以是斜杠(“%d/%m/%y”)。确认 R 将其视为日期。如果没有,请尝试不同的格式化命令

EPL2011_12$Date <- format(EPL2011_12$Date, format="%d/%m/%y")

一旦你有了日期格式,你可以使用subset命令,或者你可以使用括号

WhateverYouWant <- EPL2011_12[EPL2011_12$Date > as.Date("2014-12-15"),]

于 2014-12-15T05:45:08.837 回答