2012-03-23 9 views
59

से समय निकालने से मैं दिनांक भाग को छोड़कर POSIXct ऑब्जेक्ट्स की श्रृंखला से समय निकालूं?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) 

मैं दिन के वैल बनाम समय को साजिश करना चाहता हूं, जब वैल मापा गया था तो विशिष्ट दिन के अनपेक्षित रूप से।

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

उत्तर

76

आप किसी भी चरित्र प्रारूप करने के लिए परिवर्तित करने के लिए datetimes 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" 

लेकिन वह बहुत ज्यादा मदद नहीं करता है, जब से तुम अपने डेटा को प्लॉट करना चाहते हैं।

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

:

> 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 वस्तुओं का उपयोग कर सकते हैं: एक वैकल्पिक हल के लिए अपने समय से तारीख तत्व पट्टी, और फिर अपने समय के सभी के लिए एक समान दिनांक जोड़ना है enter image description here


अधिक मदद के लिए, ?DateTimeClasses

12

पिछले उत्तरों रहे हैं जो चाल दिखाया गया है। संक्षेप में:

  • आप 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 

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

enter image description here

3

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

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

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

+0

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

2

time_t मध्यरात्रि जीएमटी के लिए मूल्य 86400 (24 * 3600) द्वारा हमेशा विभाजित होता है। सेकंड-मध्य-मध्यरात्रि जीएमटी के लिए मूल्य time %% 86400 है।

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

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

enter image description here

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

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

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

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

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

संबंधित मुद्दे