【问题标题】:R problem Date column stored as Factor R can't convert itR问题存储为因子R的日期列无法转换
【发布时间】:2018-11-11 16:37:30
【问题描述】:

我已从 Yahoo Finance 股票代码 GSPC 下载了 SP500 数据,并尝试按年份对其进行过滤,但 Date 列存储为 Factor,因此 R 无法对其进行过滤。谁能帮我转换一下?我尝试了多种解决方案,但没有任何效果。

到目前为止,我已经使用了加载的 lubridate 包并使用了以下代码,但所有值都被替换为 NA 的。

as.Date(SP500$Date, format = "%m-%d-%Y") 

然后我使用了:SP500$Date <- ymd(SP500$Date, format = "%Y-%m-%d") 代码,但什么也没发生。 (SP500 是我存储数据的数据框的名称)

另外,尝试只使用SP500$Date <- as.Date(SP500$Date),但 R 说不知道如何将其转换为日期。

任何帮助将不胜感激!谢谢!

【问题讨论】:

  • 欢迎来到 SO!因子实际上是数字。您可以使用as.character() 将它们转换为字符,然后使用as.Date。如果您使用的是data.frame,则可以使用stringsAsFactorsFALSE 来防止它转换为因子

标签: r


【解决方案1】:

类只存在于编程语言的环境中。可能发生的情况是您的数据(可能是 .csv 文件?)在读取过程中被 R 解释为 factor

您在此处尝试执行的所有操作都可以使用 R 中的 base 库来完成(这意味着您无需导入任何内容)。

如果您正在处理日期:

df$date <- as.Date(df$date, format = "%Y-%m-%d")

如果您正在处理日期时间:

df$date <- as.POSIXct(df$date, format = "%Y-%m-%d %H:%M:%S")

(显然具体格式可能会有所不同;see list

有时,R 中的强制转换可能会显得很挑剔。 format 参数有点难以容忍错误。我个人经常将- 误认为/,或者将"%Y-%m-%d""%d-%m-%Y" 混为一谈,导致操作抛出错误。显然,如果您的数据中的格式不一致,您提供的特定 format 无法描述的实例将导致 NAs。

有时您的日期实际上是整数(例如20181111);在这种情况下,您可能需要将'1970-01-01' 提供给as.Date()origin 参数。例如,如果您使用 for 循环遍历 Dates 的向量,R 将不尊重传递的 Dates 类,并将它们转换为 integers。

这听起来像是一个创可贴的解决方案,但类强制来自常见类型,如character,通常写得很好;当我不知道为什么我强制上课失败的原因时,我经常先发制人地将对象强制为character

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多