我正在将数据框导入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
的问题尽管如此,经过充分的解释,在花了一些时间阅读并尝试后,我无法自己解决这个问题。
答案 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.table
,read.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”)