سؤال

أنا أقرأ طاولة ويحتوي على سلاسل تصف الطوابع الزمنية. أريد فقط تحويل من سلسلة إلى نوع 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

ولكن إذا مررت بتمثيل رقمي محتفظ به في البيانات. الإطار ، فإنه يعمل ...

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"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top