【问题标题】:Subset data.frame by date子集data.frame按日期
【发布时间】:2013-01-06 10:56:12
【问题描述】:

我有一个名为 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 将其视为文本而不是数字,为什么它不起作用?

【问题讨论】:

  • 这意味着您的 Date 列被作为一个因素读入(大概是在使用 read.table 或一些类似的函数时)。您需要使用例如转换它as.Date.
  • 不要忘记as.character(),例如使用as.Date(as.character(X), "%d-%m-%y")
  • @DirkEddelbuettel 没有as.Date.factor 方法,还是我误解了它的作用......?
  • 有趣。那一定是新的。过去我经常被as.Date(factorvar) 咬,factorvar 成为它的水平......

标签: r date subset


【解决方案1】:

嗯,它显然不是一个数字,因为它有破折号。错误消息和两个 cmets 告诉您这是一个因素,但评论员显然正在等待并让消息下沉。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 格式(如果使用任何分隔符,则使用相同的分隔符),它才会成功。

【讨论】:

【解决方案2】:

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

class(EPL2011_12$Date)

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

EPL2011_12$Date &lt;- as.Date(EPL2011_12$Date, "%d-%m-%y")

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

EPL2011_12$Date &lt;- format(EPL2011_12$Date, format="%d/%m/%y")

一旦有了日期格式,就可以使用subset 命令,也可以使用方括号

WhateverYouWant &lt;- EPL2011_12[EPL2011_12$Date &gt; as.Date("2014-12-15"),]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 2018-12-26
    • 2021-04-27
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    相关资源
    最近更新 更多