r - 了解R中的日期/时间(POSIXc和POSIXct)

标签 r datetime posixct

我正在读一个表,它包含描述时间戳的字符串。我只想从字符串转换为内置的datetime类型...

R> Q <- read.table(textConnection('
               tsstring
1 "2009-09-30 10:00:00"
2 "2009-09-30 10:15:00"
3 "2009-09-30 10:35:00"
4 "2009-09-30 10:45:00"
5 "2009-09-30 11:00:00"
'), as.is=TRUE, header=TRUE)
R> ts <- strptime(Q$tsstring, "%Y-%m-%d %H:%M:%S", tz="UTC")

如果我尝试将datetime列存储到data.frame中,则会收到一个奇怪的错误:
R> Q$ts <- ts
Error in `$<-.data.frame`(`*tmp*`, "ts", value = list(sec = c(0, 0, 0,  : 
  replacement has 9 rows, data has 5

但是如果我通过data.frame中保存的数字表示,它就可以工作...
R> EPOCH <- strptime("1970-01-01 00:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC")
R> Q$minutes <- as.numeric(difftime(ts, EPOCH, tz="UTC"), units="mins")
R> Q$ts <- EPOCH + 60*Q$minutes

对了解情况有什么帮助吗?

最佳答案

strptime返回POSIXlt类,您需要在数据框中添加POSIXct:

R> class(strptime("2009-09-30 10:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC"))
[1] "POSIXt"  "POSIXlt"
R> class(as.POSIXct("2009-09-30 10:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC"))
[1] "POSIXt"  "POSIXct"
POSIXct类表示自开始的秒数(有符号)
1970年作为数值向量。 POSIXlt类是表示sec,min,hour,mday,mon,year等的向量的命名列表。
R> unclass(strptime("2009-09-30 10:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC"))
$sec
[1] 0
$min
[1] 0
$hour
[1] 10
$mday
[1] 30
$mon
[1] 8
$year
[1] 109
$wday
[1] 3
$yday
[1] 272
$isdst
[1] 0
attr(,"tzone")
[1] "UTC"

R> unclass(as.POSIXct("2009-09-30 10:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC"))
[1] 1.254e+09
attr(,"tzone")
[1] "UTC"

关于r - 了解R中的日期/时间(POSIXc和POSIXct),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1803627/

相关文章:

r - 创建一组同事的 Windows 7 PC 以在 R 中进行并行处理?

javascript - 使用 JS 在浏览器支持下转换过去的日期时间

r - 如何绘制独立于日期的 POSIXct 对象/时间戳?

python - 时间戳偏移量(天、小时、分钟等)

asp.net-mvc - 将 c# Datetime 转换为输入 [type=date]

r - as.POSIXct 中可能存在错误

r - 从字符到日期/时间的转换返回 NA

r - 如何在 R Markdown 中自动实现文本和代码块之间的不同间距?

R SVM 预测

r - 将 ifelse() 应用于向量的每个元素