2011-08-26 8 views
7

मैं कुछ ग्रेड प्लॉट करने की कोशिश कर रहा हूं जो मैं बाहरी स्रोत से खींच रहा हूं। दिनांक स्वरूप इस तरह की तलाश में आता है:ggplot2 प्लॉटिंग दिनांक डेटा से त्रुटि - अनुपलब्ध मान जहां TRUE/FALSE की आवश्यकता है

2011-08-23T17:07:05 

तो मैं strptime(date, "%FT%X") साथ उसे पार्स और एक POSIXlt मिलता है।

    date subject grade 
1 2011-08-23 17:07:05 AP Biology 95.83 
2 2011-08-24 17:07:03 AP Biology 95.83 
3 2011-08-25 17:08:27 AP Biology 95.83 
4 2011-08-17 17:05:54 US History 157.14 
5 2011-08-18 17:05:24 US History 157.14 
6 2011-08-19 17:05:35 US History 157.14 
7 2011-08-22 17:06:25 US History 157.14 
8 2011-08-23 17:07:05 US History 157.14 
9 2011-08-24 17:07:03 US History 157.14 
10 2011-08-25 17:08:27 US History 157.14 
11 2011-08-19 17:05:35 Yearbook 0.00 
12 2011-08-22 17:06:25 Yearbook 0.00 
13 2011-08-23 17:07:05 Yearbook 100.00 
14 2011-08-24 17:07:03 Yearbook 100.00 
15 2011-08-25 17:08:27 Yearbook 100.00 
निम्नलिखित संरचना के साथ

:: मैं एक पूरा डेटा फ्रेम कि इस तरह दिखता है के साथ खत्म

'data.frame': 15 obs. of 3 variables: 
$ date : POSIXlt, format: "2011-08-23 17:07:05" "2011-08-24 17:07:03" ... 
$ subject: Factor w/ 3 levels "AP Biology","US History",..: 1 1 1 2 2 2 2 ... 
$ grade : num 95.8 95.8 95.8 157.1 157.1 ... 

जब मैं इस डेटा प्लॉट करने की कोशिश:

> ggplot(data=grades, aes(date, grade, factor=subject)) + geom_line() 
Error in if (length(range) == 1 || diff(range) == 0) { : 
    missing value where TRUE/FALSE needed 

मैं डॉन ' मुझे पता है कि मैं यहाँ क्या गलत कर रहा हूँ। मैंने इसे करने से तारीख को संभालने के लिए इसे संकुचित कर दिया:

ggplot(data=grades, 
     aes(seq(length(grades[,1])), 
      grade, color=subject)) + geom_line() 

... लेकिन मैं तारीख को सही ढंग से संभालने का तरीका कैसे करूं?

उत्तर

12

केवल वर्ग POSIXct के समय ggplot2 में समर्थित हैं। कक्षा POSIXct एक संख्यात्मक वेक्टर के रूप में 1 9 70 (यूटीसी टाइमज़ोन में) की शुरुआत से सेकंड (हस्ताक्षरित) संख्या का प्रतिनिधित्व करता है। कक्षा POSIXlt नौ तत्वों (sec, min, hour, आदि का प्रतिनिधित्व करने वाले वैक्टरों की एक नामित सूची है)।

grades$date <- as.POSIXct(grades$date) 
+0

हे, आप लगभग एक ही सामान लगभग एक ही समय में मैंने किया था पोस्ट:

आप निम्न का उपयोग कर सकते हैं। हालांकि, मैं आपके प्रयास के लिए बहुत बहुत धन्यवाद। :) – Dustin

+0

हाँ, बस 39 सेकंड :) – rcs

+1

+1 इसे स्पष्ट रूप से समझाते हुए। यह पहली बार है कि मैं अंतर समझता हूं। अगर केवल मदद फाइलों में यह स्पष्ट था! (और शायद यह है, मैं बस इसे अभी तक नहीं मिला है।) – Andrie

2

मुझे लगता है कि मैंने इसे समझ लिया है। अंतर POSIXct बनाम POSIXlt समझने में है। POSIXlt भागों में कैलेंडर समय है। POSIXct युग के बाद से सेकंड की संख्या है। strptime रिटर्न एक `POSIXct

आदेश इस डेटा का उपयोग करने के लिए, मैं timestamps बदलने की आवश्यकता:

grades$date <- as.POSIXct(grades$date) 
संबंधित मुद्दे