आर

2009-11-26 11 views
6

में दिनांक/समय (POSIXc और POSIXct) को समझना मैं एक टेबल पढ़ रहा हूं और इसमें तारों का वर्णन करने वाले तार शामिल हैं।आर

R> Q$ts <- ts 
Error in `$<-.data.frame`(`*tmp*`, "ts", value = list(sec = c(0, 0, 0, : 
    replacement has 9 rows, data has 5 
: मैं बस स्ट्रिंग से निर्मित एक 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") 

अगर मैं data.frame में datetime स्तंभ स्टोर करने के लिए प्रयास करते हैं, मैं एक जिज्ञासु त्रुटि मिलती चाहते

लेकिन अगर मैं 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 

स्थिति को समझने में कोई मदद?

उत्तर

12

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 आदि का प्रतिनिधित्व सेकंड, मिनट, घंटे, mday, सोमवार, साल वैक्टर के एक नामित सूची, है

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" 
+0

नोट करने के लिए एक और दिलचस्प बात यह है कि एक POSIXlt वस्तु की लंबाई() हमेशा 9. लंबाई है व्यक्तिगत घटकों, जैसे $ मिनट, वस्तु के अंदर समय टिकटें की संख्या को प्रतिबिंबित करने के लिए वृद्धि। – Sharpie

+0

एक और दिलचस्प बात: मैंने यह जांचने के लिए 'इनपुट' का उपयोग किया कि 'POSIXlt' के साथ क्या होता है जब मैं इसमें कोई संख्या जोड़ता हूं और वास्तव में परिणाम 'POSIXct' होता है। यह बताता है कि मैं पहले उदाहरण में क्या देख रहा था। – mariotomo