按日期子集数据框

32

我有一个名为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 被当作文本而非数字来处理,这就是为什么它不能运行的原因?

2
иҝҷж„Ҹе‘ізқҖжӮЁзҡ„ж—ҘжңҹеҲ—иў«иҜ»еҸ–дёәеӣ еӯҗпјҲеҸҜиғҪжҳҜеңЁдҪҝз”Ёread.tableжҲ–жҹҗдёӘзұ»дјјеҮҪж•°ж—¶пјүгҖӮжӮЁйңҖиҰҒдҪҝз”ЁдҫӢеҰӮas.DateиҝӣиЎҢиҪ¬жҚўгҖӮ - joran
不要忘记使用 as.character(),例如使用 as.Date(as.character(X), "%d-%m-%y") - Dirk Eddelbuettel
@DirkEddelbuettel 没有 as.Date.factor 方法吗?或者我理解错了它的作用......? - joran
有趣。那一定是比较新的东西。过去我经常被 as.Date(factorvar) 这个函数咬伤,因为它会把 factorvar 转换成它的水平值... - Dirk Eddelbuettel
2个回答

53

显然这不是一个数字,因为它里面有连字符。错误消息和两个评论告诉你它是一个因子,但评论者显然在等待并让消息扎根。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/01 13:34:59,您可以参考https://stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html获取更多的格式细节。 - huangli

6
首先,您应该对日期变量进行确认以确保R将其读取为日期格式。为此,请针对名为EPL2011_12的数据框中的名为Date的变量(即向量/列)输入以下命令: 输出结果应该是[1] "Date"。如果不是,您可以通过以下方式将其格式化为日期格式: 请注意,上述日期格式("%d-%m-%y")中的连字符也可以是斜杠("%d/%m/%y")。请确认R是否将其识别为日期格式。如果没有,请尝试使用其他格式化命令: 一旦将其格式化为日期格式,您就可以使用命令,或者您可以使用括号: as.Date("2014-12-15"),]>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接