2013-01-23 10 views
5

मैं बाइक दौड़ के परिणामों का विश्लेषण करके आर सीख रहा हूं और मुझे समय डेटा के साथ समस्याएं आ रही हैं (एक व्यक्ति ने दौड़ को पूरा करने के लिए कितना लिया)।समय, दूरी और गति के साथ कैसे काम करें?

समय डेटा में प्रारूप "एचएच: एमएम: एसएस" है।

मैंने इसे पॉजिक्सक्ट में बदलने की कोशिश की लेकिन इसमें एक तिथि घटक जोड़ा गया। मैंने क्रोन पैकेज को भी आजमाया लेकिन यह मुझे एक ऑब्जेक्ट

एक चीज में से एक को विभाजित करने की अनुमति नहीं देगा, मैं इस समय का उपयोग करके औसत गति की गणना करना चाहता हूं, इसलिए मुझे दूरी को विभाजित करने में सक्षम होना चाहिए समय से।

+3

सेकंड या छोटा करने के लिए इसे कन्वर्ट सांख्यिक (यहाँ, सेकंड के बजाय घंटे) करने के लिए परिवर्तित करने के बाद है। घंटों और मिनटों के साथ प्रतिनिधित्व वास्तव में प्रस्तुति के लिए है। –

+0

तिथियों के साथ काम करते समय आपको 'lubridate' पैकेज उपयोगी हो सकता है। एक पीडीएफ है जो जर्नल ऑफ स्टैटिस्टिकल सॉफ्टवेयर में प्रकाशित "डेट्स एंड टाइम्स मेड इज़ी विद लुब्रिडेट" नामक पैकेज का वर्णन करता है। एक त्वरित खोज इसे चालू कर देगा। – rrs

उत्तर

5

पैकेज chron कक्षाओं के साथ सौदा करने के लिए कक्षाएं हैं, और उपयोग करने के लिए कार्य है, इसके लिए प्रतीक्षा करें, times()। यहाँ एक मानक मैराथन चलाने के लिए ठेठ बार का उपयोग कर एक उदाहरण है:

library(chron) 
tms <- c("2:06:00", "3:34:30", "4:12:59") 
x <- times(tms) 

अब आप एक times वस्तु है, एक दिन के भिन्न का प्रतिनिधित्व।

str(x) 
Class 'times' atomic [1:3] 0.0875 0.149 0.1757 
    ..- attr(*, "format")= chr "h:m:s" 

आप गति गणना प्रदर्शन कर सकते हैं, लेकिन आप as.numeric के साथ संख्यात्मक को dates से वर्ग में परिवर्तित करने की आवश्यकता होगी।

dist <- 42.2 
as.numeric(dist/x/24) 
[1] 20.09524 11.80420 10.00856 

और वहां आपके पास यह है: किमी/घंटा में गति।

5

मैं POSIXct का उपयोग करूंगा जिसके लिए आपके पास बेस आर और एड-ऑन पैकेज में सबसे मजबूत समर्थन है।

जब भी मैं इंट्रा-दैनिक डेटा का उपयोग करता हूं जिसके लिए दिन कोई फर्क नहीं पड़ता है, तो मैं वर्तमान वर्ष के 1 जनवरी का मूल दिनांक जोड़ता हूं। सभी तुलनाओं, मतभेदों, आदि के लिए यह धोया जाता है।

नोट के अलावा

: एक POSIXct चर के as.numeric() आप वापस सामान्य करने के लिए संख्या (seconds.subseconds के युग के बाद से) हो जाता है जो उपयोगी है दोनों अंकगणित के लिए और मामले में आप स्टोर करने के लिए (दिनांक के बिना एक DB में) की जरूरत है, या किसी अन्य सिस्टम या भाषाओं में स्थानांतरित करें। युग के आसान होने के बाद सभी के पास फ्लोटिंग पॉइंट --- और (fractional) सेकेंड हैं।

R> txt <- c("08:09:10", "09:10:11", "10:11:12", "11:12:13") 
R> times <- as.POSIXct(paste("2013-01-01", txt)) 
R> times 
[1] "2013-01-01 08:09:10 CST" "2013-01-01 09:10:11 CST" 
+ "2013-01-01 10:11:12 CST" "2013-01-01 11:12:13 CST" 
R> times - times[1] 
Time differences in secs 
[1]  0 3661 7322 10983 
attr(,"tzone") 
[1] "" 
R> as.numeric(times - times[1]) 
[1]  0 3661 7322 10983 
R> 
3

क्या आप देख रहे हैं वास्तव में समय नहीं है, लेकिन एक बीता हुआ समय: POSIXct देता है आप स्वरूपण, दृश्यों, अंतर के लिए लाभ जोड़े, साजिश रचने, ...

यह एक छोटा सा उदाहरण है। विलुप्त समय के लिए डेटा प्रकार हैं। बेस आर में, difftime कक्षा यह करता है।

tms <- c("2:06:00", "3:34:30", "4:12:59", "08:09:10", 
     "09:10:11", "10:11:12", "11:12:13") 

ta <- as.difftime(tms) 

को प्रदर्शित करता है जो के रूप में

> ta 
Time differences in hours 
[1] 2.100000 3.575000 4.216389 8.152778 9.169722 10.186667 11.203611 
attr(,"tzone") 
[1] "" 
> format(ta) 
[1] " 2.100000 hours" " 3.575000 hours" " 4.216389 hours" " 8.152778 hours" " 9.169722 hours" 
[6] "10.186667 hours" "11.203611 hours" 

आप सांख्यिक को परिवर्तित करके साथ ही इस के साथ गणित कर सकते हैं।

> 42.2/as.numeric(ta) 
[1] 20.095238 11.804196 10.008564 5.176150 4.602102 4.142670 3.766643 

lubridate पैकेज भी है कि बीता हुआ समय के साथ सौदा प्रकार, विशेष रूप से duration है।

library("lubridate") 
ti <- as.duration(as.difftime(tms)) 

जो प्रदर्शित करता है के रूप में

> ti 
[1] 7560s (~2.1 hours) 12870s (~3.58 hours) 15179s (~4.22 hours) 29350s (~8.15 hours) 
[5] 33011s (~9.17 hours) 36672s (~10.19 hours) 40333s (~11.2 hours) 

और आप के साथ गणित कर सकते हैं

> 42.2/as.numeric(ti) 
[1] 0.005582011 0.003278943 0.002780157 0.001437819 0.001278362 0.001150742 0.001046290 
संबंधित मुद्दे