POSIXct से समय निकाल रहा है


85

मैं तारीख वाले भाग को छोड़ने वाली POSIXct वस्तुओं की श्रृंखला से समय कैसे निकालूंगा?

उदाहरण के लिए, मेरे पास:

times <- structure(c(1331086009.50098, 1331091427.42461, 1331252565.99979, 
1331252675.81601, 1331262597.72474, 1331262641.11786, 1331269557.4059, 
1331278779.26727, 1331448476.96126, 1331452596.13806), class = c("POSIXct", 
"POSIXt"))

जो इन तिथियों से मेल खाता है:

"2012-03-07 03:06:49 CET" "2012-03-07 04:37:07 CET" 
"2012-03-09 01:22:45 CET" "2012-03-09 01:24:35 CET" 
"2012-03-09 04:09:57 CET" "2012-03-09 04:10:41 CET"
"2012-03-09 06:05:57 CET" "2012-03-09 08:39:39 CET"
"2012-03-11 07:47:56 CET" "2012-03-11 08:56:36 CET"

अब, मेरे पास उस समय मापे गए पैरामीटर के लिए कुछ मूल्य हैं

val <- c(1.25343125e-05, 0.00022890575, 
         3.9269125e-05, 0.0002285681875, 
         4.26353125e-05, 5.982625e-05, 
         2.09575e-05, 0.0001516951251, 
         2.653125e-05, 0.0001021391875)

मैं दिन के समय बनाम घाटी की साजिश करना चाहूंगा, भले ही उस दिन को मापा गया हो।

क्या कोई विशिष्ट कार्य है जो मुझे ऐसा करने की अनुमति देगा?

जवाबों:


117

आप strftimeडेटेटाइम को किसी भी वर्ण प्रारूप में बदलने के लिए उपयोग कर सकते हैं :

> t <- strftime(times, format="%H:%M:%S")
> t
 [1] "02:06:49" "03:37:07" "00:22:45" "00:24:35" "03:09:57" "03:10:41"
 [7] "05:05:57" "07:39:39" "06:47:56" "07:56:36"

लेकिन यह बहुत मदद नहीं करता है, क्योंकि आप अपना डेटा प्लॉट करना चाहते हैं। एक वर्कअराउंड तिथि तत्व को आपके समय से अलग करना है, और फिर अपने सभी समय में एक समान तिथि जोड़ना है:

> xx <- as.POSIXct(t, format="%H:%M:%S")
> xx
 [1] "2012-03-23 02:06:49 GMT" "2012-03-23 03:37:07 GMT"
 [3] "2012-03-23 00:22:45 GMT" "2012-03-23 00:24:35 GMT"
 [5] "2012-03-23 03:09:57 GMT" "2012-03-23 03:10:41 GMT"
 [7] "2012-03-23 05:05:57 GMT" "2012-03-23 07:39:39 GMT"
 [9] "2012-03-23 06:47:56 GMT" "2012-03-23 07:56:36 GMT"

अब आप datetimeअपने भूखंड में इन वस्तुओं का उपयोग कर सकते हैं :

plot(xx, rnorm(length(xx)), xlab="Time", ylab="Random value")

यहां छवि विवरण दर्ज करें


अधिक सहायता के लिए, देखें ?DateTimeClasses


15

पिछले जवाब हैं जो चाल दिखाते हैं। संक्षेप में:

  • POSIXctसभी मौजूदा प्लॉटिंग फ़ंक्शंस का लाभ उठाने के लिए आपको प्रकारों को बनाए रखना चाहिए

  • यदि आप एक ही भूखंड के लायक कई दिनों के लिए 'ओवरले' करना चाहते हैं, तो इंट्रा-दैनिक भिन्नता को उजागर करना, सबसे अच्छी चाल भी है ...

  • उसी दिन (और महीने और यहां तक ​​कि वर्ष की आवश्यकता हो, जो यहां नहीं है) लागू करें

जो आप POSIXltप्रतिनिधित्व में जब दिन और महीने के घटकों को ओवरराइड करके कर सकते हैं , या बस अलग-अलग दिनों के बीच 0:00:00 के सापेक्ष 'डेल्टा' को ऑफसेट करके।

तो आपके साथ timesऔर valआपके द्वारा सहायता प्रदान की गई है:

## impose month and day based on first obs
ntimes <- as.POSIXlt(times)    # convert to 'POSIX list type'
ntimes$mday <- ntimes[1]$mday  # and $mon if it differs too
ntimes <- as.POSIXct(ntimes)   # convert back

par(mfrow=c(2,1))
plot(times,val)   # old times
plot(ntimes,val)  # new times

मूल और संशोधित समय के तराजू के विपरीत इस पैदावार:

यहां छवि विवरण दर्ज करें


10

data.tableपैकेज एक समारोह 'है as.ITime', जो इस कुशलता से नीचे का उपयोग कर सकते हैं:

library(data.table)
x <- "2012-03-07 03:06:49 CET"
as.IDate(x) # Output is "2012-03-07"
as.ITime(x) # Output is "03:06:49"

4

मुझे ऐसी कोई भी चीज़ नहीं मिल रही है, जो घड़ी के समय के साथ ठीक से काम करती है, इसलिए मैं पैकेज से कुछ कार्यों का उपयोग करूंगा: सेकंड-मिडनाइट के साथ लुब्रिडेट और काम:

require(lubridate)
clockS = function(t){hour(t)*3600+minute(t)*60+second(t)}
plot(clockS(times),val)

आप तब अक्ष कोड में से कुछ को देखना चाहते हैं कि कुल्हाड़ियों को अच्छी तरह से कैसे लेबल किया जाए।


अच्छा, मुझे देखना होगा lubridate, एक दिलचस्प पैकेज की तरह लगता है।
निको

4

time_tGMT मध्यरात्रि के लिए मूल्य हमेशा विभाज्य द्वारा होता है 86400( 24 * 3600)। सेकंड के बाद से मध्यरात्रि GMT का मान इस प्रकार है time %% 86400

GMT में घंटा है (time %% 86400) / 3600और इसे प्लॉट के x- अक्ष के रूप में इस्तेमाल किया जा सकता है:

plot((as.numeric(times) %% 86400)/3600, val)

यहां छवि विवरण दर्ज करें

समय क्षेत्र के लिए समायोजित करने के लिए, मापांक लेने से पहले का समय समायोजित करें, सेकंड की संख्या जोड़कर जो आपका समय क्षेत्र GMT से आगे है। उदाहरण के लिए, यूएस सेंट्रल डेलाइट सेविंग टाइम (सीडीटी) जीएमटी से 5 घंटे पीछे है। सीडीटी में समय के खिलाफ साजिश करने के लिए, निम्नलिखित अभिव्यक्ति का उपयोग किया जाता है:

plot(((as.numeric(times) - 5*3600) %% 86400)/3600, val)

4

कई समाधान प्रदान किए गए हैं, लेकिन मैंने इसे नहीं देखा है, जो पैकेज क्रोन का उपयोग करता है:

hours = times(strftime(times, format="%T"))
plot(val~hours)

(क्षमा करें, मैं एक छवि पोस्ट करने का हकदार नहीं हूं, आपको इसे स्वयं प्लॉट करना होगा)


1

यहाँ hh निकालने के लिए एक सुव्यवस्थित तरीके की तलाश करने वालों के लिए एक अद्यतन है: POSIXct ऑब्जेक्ट से mm :: ss.sssss। ध्यान दें कि समय क्षेत्र आउटपुट में शामिल नहीं है।

library(hms)
as_hms(times)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.