आर

2014-05-21 9 views
5

में दिनांक और समय के आधार पर डेटाफ्रेम को क्रमबद्ध और रैंकिंग करना मेरे पास एक डेटाफ्रेम है। मूल रूप से यह केवल दो कॉलम/चर था - "टाइमस्टैम्प" (जिसमें दिनांक और समय शामिल है) और "अभिनेता"। मैं घंटे "और" मिनट "" और नीचे में समय "" तारीख "और" समय "और फिर में" समय-चिह्न "चर टूट गया। यह उसके बाद निम्न संरचनाआर

dataf<-structure(list(hours = structure(c(3L, 4L, 4L, 3L, 3L, 3L, 6L, 
6L, 6L, 6L, 6L, 2L, 2L, 2L, 2L, 5L, 5L, 5L, 1L, 1L, 2L, 2L), .Label = c("9", 
"12", "14", "15", "16", "17"), class = "factor"), mins = structure(c(17L, 
1L, 2L, 14L, 15L, 16L, 3L, 4L, 6L, 6L, 7L, 9L, 9L, 13L, 13L, 
10L, 11L, 12L, 2L, 5L, 8L, 8L), .Label = c("00", "04", "08", 
"09", "10", "12", "13", "18", "19", "20", "21", "22", "27", "39", 
"51", "52", "59"), class = "factor"), date = structure(c(3L, 
3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 4L, 4L, 
4L, 1L, 1L, 1L, 1L), .Label = c("4/28/2014", "5/18/2014", "5/2/2014", 
"5/6/2014"), class = "factor"), time = structure(c(7L, 8L, 9L, 
4L, 5L, 6L, 13L, 14L, 15L, 15L, 16L, 2L, 2L, 3L, 3L, 10L, 11L, 
12L, 17L, 18L, 1L, 1L), .Label = c("12:18", "12:19", "12:27", 
"14:39", "14:51", "14:52", "14:59", "15:00", "15:04", "16:20", 
"16:21", "16:22", "17:08", "17:09", "17:12", "17:13", "9:04", 
"9:10"), class = "factor"), Timestamp = structure(c(13L, 14L, 
15L, 10L, 11L, 12L, 6L, 7L, 8L, 8L, 9L, 2L, 2L, 3L, 3L, 16L, 
17L, 18L, 4L, 5L, 1L, 1L), .Label = c("4/28/2014 12:18", "4/28/2014 12:19", 
"4/28/2014 12:27", "4/28/2014 9:04", "4/28/2014 9:10", "5/18/2014 17:08", 
"5/18/2014 17:09", "5/18/2014 17:12", "5/18/2014 17:13", "5/2/2014 14:39", 
"5/2/2014 14:51", "5/2/2014 14:52", "5/2/2014 14:59", "5/2/2014 15:00", 
"5/2/2014 15:04", "5/6/2014 16:20", "5/6/2014 16:21", "5/6/2014 16:22" 
), class = "factor"), Actor = c(7L, 7L, 7L, 7L, 7L, 7L, 5L, 5L, 
2L, 12L, 2L, 7L, 7L, 7L, 7L, 10L, 10L, 10L, 7L, 10L, 7L, 7L)), .Names = c("hours", 
"mins", "date", "time", "Timestamp", "Actor"), row.names = c(NA, 
-22L), class = "data.frame")  

टाइमस्टैम्प को तोड़ने के लिए कारण देता है और अलग-अलग चरों में समय चर का कारण था क्योंकि मेरे वास्तविक डेटा में मुझे डेटा और/या समय से सॉर्ट करने में बहुत सारी समस्याएं आई हैं। इन चरों को छोटे टुकड़ों में तोड़ने से इसे बहुत आसान बना दिया गया है।

मैं क्या करूंगा ऐसा करना अब "रैंक" नामक एक नया चर बना रहा है, जो डेटाफ्रेम में सबसे शुरुआती घटना के लिए '1' वापस करेगा (जो 28 अप्रैल 2014 को 9.04 बजे अवलोकन होगा), फिर एक '2' दिनांक/समय ऑर्डे में अगला अवलोकन आर और इतने पर।

dataframe छंटाई अपेक्षाकृत मामूली हो गया लगता है:

dataf<-dataf[order(as.Date(dataf$date, format="%m/%d/%Y"), dataf$hours, dataf$mins),] 

यह काम करता है। लेकिन अब मैं संघर्ष कर रहा हूं अब रैंक असाइन करना है।

मैं इस कोशिश की, क्योंकि मैं मज़ा = रैंक के साथ संयोजन में 'एवेन्यू' का इस्तेमाल किया है पूर्णांकों रैंक करने के लिए है, लेकिन क्या यह पैदा करता है मज़ाक के तौर पर गलत है:

dataf$rank <- ave((dataf[order(as.Date(dataf$date, format="%m/%d/%Y"), dataf$hours, dataf$mins),]),FUN=rank) 

किसी भी मदद की सराहना की

+0

नहीं 'dataf $ रैंक <है - रैंक' पर्याप्त ($ टाइमस्टैम्प dataf)? – sgibb

+0

@sgibb ओपी ने कुछ कारणों से तारीख और डेटाटाइम ऑब्जेक्ट्स का उपयोग करने के बजाए सबकुछ कारकों के रूप में संग्रहीत करके जीवन को कठिन बना दिया है। और डुप्लिकेट टाइम स्टैंप हैं, इसलिए हम उस मुद्दे को केवल साइड-स्टेप भी नहीं कर सकते हैं और 'seq_len (nrow (dataf)) करने के लिए कह सकते हैं। – joran

उत्तर

2

मुझे नहीं पता datetime ऑब्जेक्ट में अपने घृणा है, जो यह सब बहुत सरल बनाता का हिस्सा:

dataf$ts <- strptime(as.character(dataf$Timestamp),'%m/%d/%Y %H:%M') 
dataf <- dataf[order(dataf$ts),] 
dataf$ts_rank <- rank(dataf$ts,ties.method = "min") 
dataf 
## hours mins  date time  Timestamp Actor     ts ts_rank 
## 19  9 04 4/28/2014 9:04 4/28/2014 9:04  7 2014-04-28 09:04:00  1 
## 20  9 10 4/28/2014 9:10 4/28/2014 9:10 10 2014-04-28 09:10:00  2 
## 21 12 18 4/28/2014 12:18 4/28/2014 12:18  7 2014-04-28 12:18:00  3 
## 22 12 18 4/28/2014 12:18 4/28/2014 12:18  7 2014-04-28 12:18:00  3 
## 12 12 19 4/28/2014 12:19 4/28/2014 12:19  7 2014-04-28 12:19:00  5 
## 13 12 19 4/28/2014 12:19 4/28/2014 12:19  7 2014-04-28 12:19:00  5 
## 14 12 27 4/28/2014 12:27 4/28/2014 12:27  7 2014-04-28 12:27:00  7 
## 15 12 27 4/28/2014 12:27 4/28/2014 12:27  7 2014-04-28 12:27:00  7 
## 4  14 39 5/2/2014 14:39 5/2/2014 14:39  7 2014-05-02 14:39:00  9 
## 5  14 51 5/2/2014 14:51 5/2/2014 14:51  7 2014-05-02 14:51:00  10 
## 6  14 52 5/2/2014 14:52 5/2/2014 14:52  7 2014-05-02 14:52:00  11 
## 1  14 59 5/2/2014 14:59 5/2/2014 14:59  7 2014-05-02 14:59:00  12 
## 2  15 00 5/2/2014 15:00 5/2/2014 15:00  7 2014-05-02 15:00:00  13 
## 3  15 04 5/2/2014 15:04 5/2/2014 15:04  7 2014-05-02 15:04:00  14 
## 16 16 20 5/6/2014 16:20 5/6/2014 16:20 10 2014-05-06 16:20:00  15 
## 17 16 21 5/6/2014 16:21 5/6/2014 16:21 10 2014-05-06 16:21:00  16 
## 18 16 22 5/6/2014 16:22 5/6/2014 16:22 10 2014-05-06 16:22:00  17 
## 7  17 08 5/18/2014 17:08 5/18/2014 17:08  5 2014-05-18 17:08:00  18 
## 8  17 09 5/18/2014 17:09 5/18/2014 17:09  5 2014-05-18 17:09:00  19 
## 9  17 12 5/18/2014 17:12 5/18/2014 17:12  2 2014-05-18 17:12:00  20 
## 10 17 12 5/18/2014 17:12 5/18/2014 17:12 12 2014-05-18 17:12:00  20 
## 11 17 13 5/18/2014 17:13 5/18/2014 17:13  2 2014-05-18 17:13:00  22 
+0

बहुत बहुत धन्यवाद - अब मेरे पास टाइमस्टैम्प के लिए कोई उलझन नहीं है। यह सुनिश्चित करने के लिए कि ts_rank कॉलम में अद्वितीय रैंक हैं (यानी कोई रैंक साझा नहीं किया जा सकता है, जो कि मेरे डेटा की ज़रूरत है) - मैं इसके साथ गया हूं: dataf $ ts_rank <- रैंक (डेटाएफ $ ts, ties.method = "random") – jalapic

+0

@ जलापिक हुरेय! – joran