2012-07-04 15 views
22

के साथ एक पॉज़िक्स दिनांक (POSIXct) को गोल करें मैं वर्तमान में एक पैकेज के लिए तारीखों और समय के साथ बहुत कुछ खेल रहा हूं।आधार आर कार्यक्षमता

इस post में ठोकरने से मुझे फिर से याद दिलाया गया कि यह जांचने के लिए एक बुरा विचार नहीं है कि क्या मूलभूत आर सुविधाओं के साथ कुछ भी किया जा सकता है अगर contrib संकुल में बदलना है।

इस प्रकार, क्या आधार आर कार्यक्षमता के साथ POSIXct कक्षा की तारीख को गोल करना संभव है?

मैं

methods(round) 

जो "केवल" मुझे दिया जाँच

[1] round.Date  round.timeDate* 

    Non-visible functions are asterisked 

यह मुझे क्या करना (छद्म कोड)

x <- as.POSIXct(Sys.time()) 
[1] "2012-07-04 10:33:55 CEST" 

round(x, atom="minute") 
[1] "2012-07-04 10:34:00 CEST" 

round(x, atom="hour") 
[1] "2012-07-04 11:00:00 CEST" 

round(x, atom="day") 
[1] "2012-07-04 CEST" 

मैं जानता हूँ कि यह कर सकते हैं करना चाहते हैं क्या है timeDate, lubridate आदि के साथ किया जाना चाहिए, लेकिन मैं पैकेज निर्भरताओं को नीचे रखना चाहता हूं। तो आगे बढ़ने से पहले और संबंधित पैकेजों के स्रोत कोड की जांच करने से पहले, मैंने सोचा कि मैं पूछूंगा कि किसी ने पहले से ऐसा कुछ किया है या नहीं।

उत्तर

34

base में ऐसा करने के लिए round.POSIXt है। सुनिश्चित नहीं है कि यह methods के साथ क्यों नहीं आता है।

x <- as.POSIXct(Sys.time()) 
x 
[1] "2012-07-04 10:01:08 BST" 
round(x,"mins") 
[1] "2012-07-04 10:01:00 BST" 
round(x,"hours") 
[1] "2012-07-04 10:00:00 BST" 
round(x,"days") 
[1] "2012-07-04" 
+0

महान समारोह है, लेकिन अजीब नहीं करता है सप्ताह, महीने या साल गोलाई; मेरी स्थिति के लिए मुझे @nzcoops उत्तर – chepyle

12

lubridate के साथ इस विषय पर, भी ceiling_date() और floor_date() कार्यों पर गौर:

x <- as.POSIXct("2009-08-03 12:01:59.23") 
ceiling_date(x, "second") 
# "2009-08-03 12:02:00 CDT" 
ceiling_date(x, "hour") 
# "2009-08-03 13:00:00 CDT" 
ceiling_date(x, "day") 
# "2009-08-04 CDT" 
ceiling_date(x, "week") 
# "2009-08-09 CDT" 
ceiling_date(x, "month") 
# "2009-09-01 CDT" 
+1

के साथ जाना होगा, मेरी इच्छा है कि महीना दौर POSIXct के लिए उपलब्ध था, क्योंकि floor_date दर्दनाक रूप से धीमा है। –

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