आर

2012-07-17 44 views
5

में "सप्ताह" डिब्बे में "% एच% एम" का मतलब है, मैं थोड़ी देर के लिए इसके साथ संघर्ष कर रहा हूं। मैं ts डेटा और सभी संबंधित आर पैकेज के साथ काम करने के लिए नया हूं। मेरे पास कई चर के साथ एक डीएफ है जिसमें जीएमटी "% एच% एम" और दिनांक "% वाई /% एम /% ई" नमूनाकरण का समय 'दिन का समय' शामिल है। मैं अपने दिनांक डेटा को "सप्ताह" (यानी,% डब्ल्यू /% जी) में बिन/समेकित करना चाहता हूं और उस सप्ताह के दौरान नमूनाकरण के दौरान 'दिन का समय' गणना करना चाहता हूं।आर

#calculate the sum weight captured every week 
x2c <- aggregate(OA_zoo, as.Date(cut(time(OA_zoo), "week")), sum) 

हालांकि, मैं नहीं कर रहा हूँ:

मैं संख्यात्मक चर (जैसे, वजन) पहले एक चिड़ियाघर वस्तु में मेरी df बदलने और उसके बाद इस प्रकार aggregate.zoo कमांड का उपयोग करके पर अन्य मज़ा की गणना करने में सक्षम था इस तथ्य के बारे में सुनिश्चित करें कि मैं दिनांक प्रारूप के साथ num के बजाय काम कर रहा हूं और किसी भी सुझाव की सराहना करता हूं! इसके अलावा, मैं स्पष्ट रूप से अलग-अलग रूपों में से प्रत्येक करके अलग-अलग तरीके से कोडिंग कर रहा हूं। क्या प्लीयर का उपयोग करके "साप्ताहिक" एकत्र करके मेरे डीएफ पर अलग-अलग FUN (योग/माध्य/अधिकतम/मिनट) लगाने का कोई तरीका होगा? या कुछ अन्य पैकेज?

संपादन/स्पष्टीकरणों यहाँ मेरी पूर्ण डाटासेट का एक नमूना के dput उत्पादन है। मेरे पास 2004-2011 से डेटा है। मैं ggplot2 का उपयोग करके/प्लॉट देखना चाहता हूं, समय (2004-2011) के साथ हफ्तों की अवधि में समेकित समय (% एच% एम) का औसत/औसत है। अभी, मेरा डेटा सप्ताह में समेकित नहीं है, लेकिन दैनिक (यादृच्छिक नमूना) है।

> dput(godin) 
structure(list(depth = c(878, 1200, 1170, 936, 942, 964, 951, 
953, 911, 969, 960, 987, 991, 997, 1024, 978, 1024, 951, 984, 
931, 1006, 929, 973, 986, 935, 989, 1042, 1015, 914, 984), duration = c(0.8, 
2.6, 6.5, 3.2, 4.1, 6.4, 7.2, 5.3, 7.4, 7, 7, 5.5, 7.5, 7.3, 
7.5, 7, 4.2, 3, 5, 5, 9.3, 7.9, 7.3, 7.2, 7, 5.2, 8, 6, 7.5, 
7), Greenland = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 40L, 28L, 0L, 
0L, 34L, 7L, 28L, 0L, 0L, 0L, 27L, 0L, 0L, 0L, 44L, 59L, 0L, 
0L, 0L, 0L, 0L, 0L), date2 = structure(c(12617, 12627, 12631, 
12996, 12669, 13036, 12669, 13036, 12670, 13036, 12670, 13037, 
12671, 13037, 12671, 13037, 12671, 13038, 12672, 13038, 12672, 
13038, 12672, 13039, 12631, 12997, 12673, 13039, 12673, 13039 
), class = "Date"), TIME = c("0940", "0145", "0945", "2045", 
"1615", "0310", "2130", "1045", "0625", "1830", "1520", "0630", 
"0035", "1330", "0930", "2215", "2010", "0645", "0155", "1205", 
"0815", "1845", "2115", "0350", "1745", "0410", "0550", "1345", 
"1515", "2115")), .Names = c("depth", "duration", "Greenland", 
"date2", "TIME"), class = "data.frame", row.names = c("6761", 
"9019", "9020", "9021", "9022", "9023", "9024", "9025", "9026", 
"9027", "9028", "9029", "9030", "9031", "9032", "9033", "9034", 
"9035", "9036", "9037", "9038", "9039", "9040", "9041", "9042", 
"9043", "9044", "9045", "9046", "9047")) 
+0

मुद्दा मेरे लिए स्पष्ट नहीं है। क्या एक समय के अर्थ की गणना करने में समस्या है (एक संख्यात्मक के विपरीत), या सप्ताह के आधार पर समेकित? – mac

+0

किसी को भी मदद करने में सक्षम होने के लिए आपको वास्तव में एक [पुनरुत्पादित उदाहरण] (http://stackoverflow.com/q/5963269/271616) प्रदान करने की आवश्यकता है। –

+0

आप दिन के समय का अर्थ कैसे लेते हैं? क्या आप इसके बजाय औसत या मोड नहीं करेंगे? – A5C1D2H2I1M1N2O1R2T1

उत्तर

3

मैं इस तरह यह दृष्टिकोण चाहते हैं: पहले एक स्ट्रिंग सप्ताह का प्रतिनिधित्व करने के साथ एक स्तंभ बनाने:

godin$week <- format(godin$date2, "%Y-W%U") 

यह आप "2004-W26" की तरह कुछ है, जो aggregate के लिए काफी अच्छा होगा दे देंगे।

तो आपको अपने चरित्र वेक्टर को चालू करने की आवश्यकता है जो वास्तविक समय में एचएचएमएम का प्रतिनिधित्व करता है, ताकि आप उस पर समय गणित का उपयोग कर सकें।

godin$time2 <- as.POSIXct(strptime(godin$TIME, "%H%M")) 

नोट: ऊपर एक हैक का एक सा ... strptime() वर्तमान दिनांक मान लिया गया है यदि कुछ भी निर्दिष्ट है, लेकिन है कि इस विशेष आवेदन के रास्ते में नहीं होना चाहिए, के बाद से सभी परिवर्तित बार होगा उसी तारीख, माध्य का समय हिस्सा सही होगा। मैं तिथि बाद में ...

बंद पट्टी करेंगे उस बिंदु पर, मुझे लगता है कि आप बस कुल कर सकते हैं:

x2c <- aggregate(time2~week, data=godin, FUN=mean) 

और अप्रासंगिक (और गलत) तिथि भाग से छुटकारा पाने के

x2c$time2 <- format(x2c$time2,"%H:%M:%S") 

एट वोइला।

> x2c 
     week time2 
1 2004-W29 09:40:00 
2 2004-W30 01:45:00 
3 2004-W31 13:45:00 
4 2004-W36 12:07:00 
5 2004-W37 10:32:30 
6 2005-W31 12:27:30 
7 2005-W36 10:48:20 
8 2005-W37 13:11:06 

सबक है कि यहाँ आर में कोई संबद्ध तिथियों के साथ अपने समय के आसपास पुश करने के लिए मुश्किल मैं जो दूसरों ऐसा करने का एक बेहतर तरीका हो से सुनने के लिए खुशी होगी है।

+1

'as.Date (Godin $ TIME,"% H% M ") 'एक त्रुटि है। –

+0

@ जोशुआउलिच: बाह। आप सही हे। बिना किसी तारीख के समय को कैसे परिवर्तित करें? – mac

+0

मुझे इस तरह से पता नहीं है ... –

1

यदि आप प्रति सप्ताह सभी अवलोकन समय की औसत चाहते हैं और आप तिथियों को महत्व देना चाहते हैं (यानी।19:00 आज और 19:00 कल 07:00 कल सुबह के लिए औसतन), तो आप इस

godin$datetime <- as.POSIXct(paste(godin$date2, godin$TIME), format="%Y-%m-%d %H%M") 
aggregate(godin$datetime, list(format(godin$datetime, "%W/%g")), mean) 

# Group.1     x 
#1 28/04 2004-07-18 09:40:00 
#2 30/04 2004-07-31 01:45:00 
#3 31/05 2005-08-02 00:27:30 
#4 36/04 2004-09-10 13:51:15 
#5 36/05 2005-09-11 00:26:40 
#6 37/05 2005-09-13 00:44:10 

कर सकते हैं हालांकि, मुझे लगता है कि आप औसत समय चाहते हैं, और आप तारीख के बारे में परवाह नहीं है (यह तय करने के अलावा कि यह कौन सा सप्ताह है)। उस स्थिति में, आप अपने एंकर के रूप में मनमानी तिथि का उपयोग कर सकते हैं, और उस तारीख पर होने वाले हर समय व्यवहार कर सकते हैं।

godin$stime <- as.POSIXct(paste("1970-01-01", godin$TIME), format='%Y-%m-%d %H%M') 
aggregate(godin$stime, list(format(godin$datetime, "%W/%g")), mean) 

# Group.1     x 
#1 28/04 1970-01-01 09:40:00 
#2 30/04 1970-01-01 09:45:00 
#3 31/05 1970-01-01 12:27:30 
#4 36/04 1970-01-01 11:51:15 
#5 36/05 1970-01-01 12:26:40 
#6 37/05 1970-01-01 12:44:10 

संपादित

ऊपर उत्पादन और उत्पादन @JoshuaUlrich कि प्रदान की के बीच अंतर यह है कि उनके एक सप्ताह के अनुसार क्रमबद्ध किया जाता है। अगर मैं उन्हें सॉर्ट करता हूं, तो यह यहोशू की तरह है, लेकिन 100 वें मिनट के बजाय सेकंड के साथ। (हालांकि, यह उन्हें format विनिर्देश है कि आप चुना है की वजह से एक ही तरह से सुलझाने के लिए एक छोटे से मुश्किल है।)

out <- aggregate(godin$stime, list(format(godin$datetime, "%W/%g")), mean) 
out[order(as.numeric(paste0(substr(out[, 1], 4, 5), substr(out[, 1], 1, 2)))), ] 
# Group.1     x 
#1 28/04 1970-01-01 09:40:00 
#2 30/04 1970-01-01 09:45:00 
#4 36/04 1970-01-01 11:51:15 
#3 31/05 1970-01-01 12:27:30 
#5 36/05 1970-01-01 12:26:40 
#6 37/05 1970-01-01 12:44:10 

संपादित 2

आप formataggregate अंदर तुम सिर्फ प्राप्त करना चाहते हैं कर सकते हैं अगर वापस एक स्ट्रिंग की तरह %H%M

out <- aggregate(godin$stime, list(format(godin$datetime, "%W/%g")), function(TIME) format(mean(TIME), "%H%M")) 
out[order(as.numeric(paste0(substr(out[, 1], 4, 5), substr(out[, 1], 1, 2)))), ] 
# Group.1 x 
#1 28/04 0940 
#2 30/04 0945 
#4 36/04 1151 
#3 31/05 1227 
#5 36/05 1226 
#6 37/05 1244 
+0

@GodinA, मेरे आधार आर जवाब को मूर्ख मत बनो; अगर मैं व्यक्तिगत रूप से ऐसा कर रहा था, तो मैं कुछ भी करने से पहले अपने डेटा को 'xts' में बदल दूंगा। – GSee

+0

धन्यवाद @Gsee आपके उत्तर – GodinA

+0

जानना उत्सुक है, आपके परिणाम @mac से अलग क्यों हैं? – GodinA

2

स्वरूपित आप आम इकाइयों (यानी मिनट) में TIME स्तंभ बदलना होगा। यहां कुछ सहायक कार्य करने के लिए यहां दिए गए हैं:

hour2min <- function(hhmm) { 
    hhmm <- as.numeric(hhmm) 
    trunc(hhmm/100)*60 + hhmm %% 100 
} 
min2hour <- function(min) { 
    min <- as.numeric(min) 
    trunc(min/60)*100 + min %% 60 
} 

फिर आप जो मिनट चाहें उसे जोड़ सकते हैं। मैं व्यक्तिगत रूप से उन्हें एक XTS वस्तु में डाल दिया जाएगा और apply.weekly का उपयोग करें:

library(xts) 
x <- xts(hour2min(godin$TIME), as.Date(godin$date2), dimnames=list(NULL,"MINS")) 
w <- apply.weekly(x, mean) 
w$TIME <- min2hour(w$MINS) 
#    MINS  TIME 
# 2004-07-18 580.0000 940.000 
# 2004-08-01 585.0000 945.000 
# 2004-09-12 711.2500 1151.250 
# 2005-08-02 747.5000 1227.500 
# 2005-09-11 746.6667 1226.667 
# 2005-09-13 764.1667 1244.167 

सेकंड के लिए एक मिनट का 100ths में अब भी है, लेकिन बदला जा सकता है ...

+0

आपके उत्तर @ जोशुआ उलरिच के लिए धन्यवाद, लेकिन यह वही नहीं था जो मैं ढूंढ रहा था। नीचे जवाब देखें। – GodinA