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

ell*_*11e 14 r date posixct posixlt r-factor

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

## minuteofday: factor w/ 89501 levels "2013-06-01 08:07:00",...
## dDdt: num 7.8564 2.318 ...
## minutes: POSIXlt, format: NA NA NA
Run Code Online (Sandbox Code Playgroud)

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

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

我试过了as.POSIXlt,as.POSIXct而且as.Date.这些都没有奏效.有人有想法吗.

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

Dir*_*tel 21

您需要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> 
Run Code Online (Sandbox Code Playgroud)

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

编辑于2016年1月3日:由于随时可以自动转换多种类型的软件包(包括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> 
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我们只需将因子变量输入anytime()和输出所需的POSIXct类型.


dar*_*age 7

试试这个

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

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

希望这对你有所帮助.