2017-11-01 35 views
5

मैंने पहले से ही कई उदाहरणों की तलाश की है, लेकिन मुझे कोई भी फ़िल्टर किए गए सक्षम मान & उनकी तिथियां नहीं मिलीं।आईडी पर आधारित डेटा फ्रेम, और किसी अन्य कॉलम में मान

Date <-c('3/13/2017 6:21', '3/20/2017 6:28','3/13/2017 6:22','3/20/2017 6:28',' 3/13/2017 6:23','3/20/2017 6:28','3/13/2017 6:24',' 3/20/2017 6:28', ' 3/24/2017 6:28') 
Enabled_value<-c(0,1,0,1,0,1,0,1,0) 
Helper<-c('39RTU1','39RTU1','39RTU2','39RTU2','39RTU2','39RTU3','39RTU3','39RTU4','39RTU4', '39RTU4') 

तरह देखने के लिए:

Helper  Date(Enabled Value =0)  Date (Enabled Value =1) 
39RTU1  3/13/2017 6:20   3/20/2017 6:28 
39RTU2  3/13/2017 6:21   3/20/2017 6:28 
39RTU3  3/13/2017 6:22   3/20/2017 6:28 
39RTU4  3/13/2017 6:24   3/20/2017 6:28 
39RTU4  3/24/2017 6:28 

आप देख सकते हैं, मैं एक अवलोकन के लिए टाइम स्टाम्प्स है - प्रत्येक पंक्ति (एक उदाहरण होना चाहिए यानी 0 से 1 के Enabled_value से चलती है, और अगर पिछले इकाई के लिए Enabled_value = 0 (नीचे 39RTU4 देखें), वहाँ एक नई लाइन होना चाहिए।

मैं पहले से ही व्यापक काम इस डेटा सेट (500k से पंक्तियों 2k तक) को कम करने की है।

मैं tidyr और dplyr का उपयोग करने की कोशिश कर रहा हूं, लेकिन मेरा spread चल रही त्रुटियां जारी रखता है।

> sorted_data1<-spread(sorted_data,Enabled_Value,Helper) 
Error: Duplicate identifiers for rows (1340, 1342) 
+0

मैं इस सवाल https://stackoverflow.com/questions/47043098/transpose-columns-group-by-time-and-customer-id – markdly

उत्तर

3

ऐसा लगता है कि पंक्तियों को विशिष्ट रूप से पहचाना नहीं जा रहा है जिस तरह से आप फैलाने की कोशिश कर रहे हैं। तो पहले सहायक और सक्षम मूल्य द्वारा एक सूचकांक की गणना करें। (ध्यान दें कि मैंने आपका उदाहरण डेटा थोड़ा सा बदल दिया क्योंकि उनमें से एक लंबाई 10 था, जबकि अन्य दो लंबाई 9 थे)।

उम्मीद है कि इससे मदद मिलती है। यदि आप ऐसा नहीं चाहते हैं तो कृपया आगे स्पष्टीकरण के लिए स्वतंत्र महसूस करें।

Date <-c('3/13/2017 6:21', '3/20/2017 6:28','3/13/2017 6:22','3/20/2017 6:28',' 3/13/2017 6:23','3/20/2017 6:28','3/13/2017 6:24',' 3/20/2017 6:28', ' 3/24/2017 6:28') 
Enabled_value<-c(0,1,0,1,0,1,0,1,0) 
Helper<-c('39RTU1','39RTU1','39RTU2','39RTU2','39RTU2','39RTU3','39RTU3','39RTU4','39RTU4') 

df <- tibble(Date, Enabled_value, Helper) 
df %>% 
    group_by(Helper, Enabled_value) %>% 
    mutate(count = 1:n()) %>% 
    spread(Enabled_value, Date) %>% 
    rename(Enabled_value_0 = `0`, 
     Enabled_value_1 = `1`) 

# A tibble: 5 x 4 
# Groups: Helper [4] 
    Helper count Enabled_value_0 Enabled_value_1 
* <chr> <int>   <chr>   <chr> 
1 39RTU1  1 3/13/2017 6:21 3/20/2017 6:28 
2 39RTU2  1 3/13/2017 6:22 3/20/2017 6:28 
3 39RTU2  2 3/13/2017 6:23   <NA> 
4 39RTU3  1 3/13/2017 6:24 3/20/2017 6:28 
5 39RTU4  1 3/24/2017 6:28 3/20/2017 6:28 
+0

से संबंधित है अगर आप 'mutate_at (Enabled_value जोड़ने के लिए, के रूप में लगता है .character) 'आपकी पाइप श्रृंखला की शुरुआत में आप एक पंक्ति को बचाते हैं, कुछ स्पष्टता और मैन्युअल नामकरण –

+0

कॉलम नाम इसके बिना भी स्थानांतरित हो जाएंगे। मैंने उन्हें बेहतर मिलान करने के लिए अंत में मैन्युअल नामकरण किया था (अन्यथा कॉलम नाम '0' और' 1' होगा)। मैं उत्परिवर्तन के भीतर एक पंक्ति भी जोड़ सकता था, मुझे पहले से ही प्रसार से पहले प्रत्येक अंक में "Enabled_value_" पेस्ट करना होगा। मुझे वास्तव में लगता है कि इस मामले में मैन्युअल नामकरण अधिक स्पष्ट था लेकिन निश्चित रूप से या तो काम करता है। –

+0

ओह ठीक है, मैंने बहुत तेज़ टिप्पणी की –

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