R - 帮助将因子转换为日期(%m /%d /%Y%H:%M)

时间:2014-06-30 19:47:34

标签: r date dataframe type-conversion

我正在将数据框导入R,但是R没有识别日期为日期格式的列。

> mydata[1,1] [1] 1/1/2003 0:00 216332 Levels: 1/1/2003 0:00 1/1/2003 0:15 1/1/2003 0:30 ... 9/9/2007 9:55

我试过了:

> as.Date(mydata[1,1], format = "%m/%d/%Y %H:%M")
[1] "2003-01-01"

然后我想念时间。

如果我这样做

> strptime(mydata[2,1], format = "%m/%d/%Y %H:%M")
[1] "2003-01-01 00:15:00 EST"

我得到了我需要的东西。但是,当我将此结果分配给我的变量

时,它不起作用
> mydata[,1] <- strptime(mydata[,1], format = "%m/%d/%Y %H:%M")
Warning message:
In `[<-.data.frame`(`*tmp*`, , 1, value = list(sec = c(0, 0, 0,  :
  provided 11 variables to replace 1 variables 

我的问题类似于Set time value into data frame cell

的问题

尽管如此,经过充分的解释,在花了一些时间阅读并尝试后,我无法自己解决这个问题。

4 个答案:

答案 0 :(得分:2)

等级意味着你有一个因素。您需要使用as.character()转换为字符:

 dt <- as.POSIXct(as.character(mydata[ ,1]) format = "%m/%d/%Y %H:%M")

时间= 0:00的第一项不会显示打印时间,但其他项目将显示。由于POSIXlt对象是11个项目列表的列表,因此发生错误。通常使用as.POSIXct比使用strptime更好,因为strptime返回一个POSIXlt对象,并且它们有点混乱。:

d <- factor("1/1/2003 0:01")
as.POSIXct( as.character(d), format = "%m/%d/%Y %H:%M")
[1] "2003-01-01 00:01:00 PST"

答案 1 :(得分:0)

如果您使用read.tableread.csv或类似功能来读取数据,那么您可以查看this solution以指定哪些列将成为日期并自动拥有它们在读入时进行转换。这将对字符串进行转换,而不会转换为因子(这可能是您问题的一部分)。

答案 2 :(得分:0)

在处理日期时,我发现lubridate非常有帮助:

library(lubridate)
mydata[, 1] <- mdy_hm(mydata[, 1])

答案 3 :(得分:0)

如果您不想处理级别,请尝试以下方法:

首先将您的数据转换为字符:

数据&lt; - as.character(mydata [1,1])

然后提供您需要的日期格式,例如:

日期&lt; - 格式(as.POSIXct(data,tz =“EST”),“%Y-%m-%d%H”)