在R中将因子转换为日期/时间

时间:2014-04-28 18:51:24

标签: r date posixct r-factor posixlt

这是我的数据框中包含的信息:

## minuteofday: factor w/ 89501 levels "2013-06-01 08:07:00",...
## dDdt: num 7.8564 2.318 ...
## minutes: POSIXlt, format: NA NA NA

我需要将分钟列转换为日期/时间格式:

minuteave$minutes <- as.POSIXlt(as.character(minuteave$minuteofday), format="%m/%d/%Y %H:%M:%S")

我已尝试as.POSIXltas.POSIXctas.Date。这些都没有奏效。有没有人有任何想法。

目标是绘制分钟与dDdt的关系,但它不会让我在指定的时间段内绘制我想要的因素。我不知道下一步该尝试什么...

2 个答案:

答案 0 :(得分:20)

在解析为日期时间或日期之前,您需要插入as.character()

一个因子将始终作为与其级别对应的数字返回。

您可以通过告知read.csv()等没有商店作为因素来保存转换因素:stringsAsFactors=FALSE。您也可以将其设置为全局选项。

将其作为字符后,请确保将格式字符串与您的数据相匹配

R> as.POSIXct("2013-06-01 08:07:00", format="%Y-%m-%d %H:%M:%S")
[1] "2013-06-01 08:07:00 CDT"
R> 

请注意我使用的%Y-%m-%d,而不是%m/%d/%y

2016年1月3日编辑:现在,由于anytime软件包可以自动转换多种类型,包括factor,所以现在更加容易了。无需格式字符串

R> as.factor("2013-06-01 08:07:00")
[1] 2013-06-01 08:07:00
Levels: 2013-06-01 08:07:00
R> 
R> library(anytime)
R> anytime(as.factor("2013-06-01 08:07:00"))
[1] "2013-06-01 08:07:00 CDT"
R> 
R> class(anytime(as.factor("2013-06-01 08:07:00")))
[1] "POSIXct" "POSIXt" 
R> 

正如您所看到的,我们只是将因子变量提供给anytime(),然后输出所需的POSIXct类型。

答案 1 :(得分:7)

试试这个

library(lubridate) minuteave$minutes <- ymd_hms(minuteave$minutes)

这将返回minave $ minutes作为POSIXct对象。

希望这会对你有所帮助。