दिलचस्प पोस्ट
Tensorflow और एनाकोंडा Ubuntu पर? Matplotlib / PyPlot में फास्ट लाइव प्लॉटिंग मैं एक त्वरित स्क्रिप्ट में टर्मिनल कमांड कैसे चलाऊँ? (जैसे एक्सकोडबिल्ड) एएसपी.नेट एमवीसी में प्रोफाइल प्रदाता को कार्यान्वित करना एचटीएमएल में त्रि-स्टेट चेक बॉक्स? क्या एक वेब एपीआई एपीआईकंट्रोलर विधि पर लागू एक डिफ़ॉल्ट क्रिया है? KeyError: जब मैं cx_Freeze का उपयोग करता हूं 'TCL_Library' पारदर्शी छवि के लिए सबसे छोटा डेटा यूआरआई छवि मैं एक वेबसर्वर के साथ उन्हें लोड करने से पहले asp.Net aspx पेजों को कैसे संकलित कर सकता हूँ? क्या नियमित अभिव्यक्तियों को नेस्टेड पैटर्न से मिलान करने के लिए इस्तेमाल किया जा सकता है? जटिल प्रकारों के साथ स्पार्क एसक्यूएल डाटाफ़्रेम पूछताछ करना मैं एंड्रॉइड डिवाइस से एपीके फाइल कैसे प्राप्त करूं? एलिवेशन को स्थानांतरित किए बिना होवर पर सीएसएस सीमा जोड़ें सीतनिद्रा में होना: ताज़ा करें, बेदखल, प्रतिलिपि बनाएँ और फ्लश टच जेस्चर / इवेंट्स के लिए एक सेवा कैसे सुन सकती है?

लंबे समय तक विस्तृत प्रारूप में डेटा कैसे आकार देना है?

मुझे निम्न डेटा फ्रेम को दोबारा बनाने में परेशानी हो रही है:

set.seed(45) dat1 <- data.frame( name = rep(c("firstName", "secondName"), each=4), numbers = rep(1:4, 2), value = rnorm(8) ) dat1 name numbers value 1 firstName 1 0.3407997 2 firstName 2 -0.7033403 3 firstName 3 -0.3795377 4 firstName 4 -0.7460474 5 secondName 1 -0.8981073 6 secondName 2 -0.3347941 7 secondName 3 -0.5013782 8 secondName 4 -0.1745357 

मैं इसे नयी आकृति देना चाहता हूं ताकि प्रत्येक अनूठे "नाम" चर एक रोमाना हो, जिसमें "मान" के साथ उस पंक्ति के साथ अवलोकन और "संख्या" के रूप में colnames। इस तरह से क्रमबद्ध करें:

  name 1 2 3 4 1 firstName 0.3407997 -0.7033403 -0.3795377 -0.7460474 5 secondName -0.8981073 -0.3347941 -0.5013782 -0.1745357 

मैंने melt और cast और कुछ अन्य चीजों को देखा है, लेकिन कोई भी नौकरी नहीं कर रहा है।

Solutions Collecting From Web of "लंबे समय तक विस्तृत प्रारूप में डेटा कैसे आकार देना है?"

reshape कार्य का उपयोग करना:

 reshape(dat1, idvar = "name", timevar = "numbers", direction = "wide") 

नया (2014 में) tidyr पैकेज भी ऐसा करता है, gather() / spread() साथ, melt / cast लिए शर्तें।

 library(tidyr) spread(dat1, key = numbers, value = value) 

जिथूब से ,

tidyr एक reshape2 डेटा फ्रेमवर्क के साथ तैयार करने के लिए, और डेटा विश्लेषण के लिए एक ठोस पाइपलाइन बनाने के लिए magrittr और dplyr साथ हाथ में काम करने के लिए डिज़ाइन किया गया है।

बस के रूप में reshape2 भी कम किया था, tidyr भी कम करता है। यह विशेष रूप से डेटा को reshape2 लिए डिज़ाइन किया गया है, न कि reshape2 करता है सामान्य reshape2 , या reshape2 की सामान्य एकत्रीकरण विशेष रूप से, अंतर्निहित विधियां केवल डेटा फ़्रेम के लिए काम करती हैं, और tidyr कोई हाशिए या एकत्रीकरण प्रदान नहीं करता है।

आप यह reshape() कर सकते हैं reshape() फ़ंक्शन, या melt() / cast() फ़ंक्शंस के साथ नयी आकृति पैकेज में। दूसरे विकल्प के लिए, उदाहरण कोड है

 library(reshape) cast(dat1, name ~ numbers) 

या reshape2 का उपयोग कर

 library(reshape2) dcast(dat1, name ~ numbers) 

अपने उदाहरण डेटाफ्रेम का उपयोग करके, हम निम्न कर सकते हैं:

 xtabs(value ~ name + numbers, data = dat1) 

एक अन्य विकल्प यदि प्रदर्शन चिंता का विषय है तो data.table की data.table का विस्तार करने के लिए है reshape2 के पिघल और dcast कार्य

( संदर्भ: आंकड़ों के उपयोग से प्रभावी पुनर्व्यवस्था )

 library(data.table) setDT(dat1) dcast(dat1, name ~ numbers, value.var = "value") # name 1 2 3 4 # 1: firstName 0.1836433 -0.8356286 1.5952808 0.3295078 # 2: secondName -0.8204684 0.4874291 0.7383247 0.5757814 

और, डेटा के योग्य V1.9.6 के रूप में हम कई कॉलम पर डाली जा सकते हैं

 ## add an extra column dat1[, value2 := value * 2] ## cast multiple value columns dcast(dat1, name ~ numbers, value.var = c("value", "value2")) # name value_1 value_2 value_3 value_4 value2_1 value2_2 value2_3 value2_4 # 1: firstName 0.1836433 -0.8356286 1.5952808 0.3295078 0.3672866 -1.6712572 3.190562 0.6590155 # 2: secondName -0.8204684 0.4874291 0.7383247 0.5757814 -1.6409368 0.9748581 1.476649 1.1515627 

अन्य दो विकल्प:

बेस पैकेज:

 df <- unstack(dat1, form = value ~ numbers) rownames(df) <- unique(dat1$name) df 

sqldf पैकेज:

 library(sqldf) sqldf('SELECT name, MAX(CASE WHEN numbers = 1 THEN value ELSE NULL END) x1, MAX(CASE WHEN numbers = 2 THEN value ELSE NULL END) x2, MAX(CASE WHEN numbers = 3 THEN value ELSE NULL END) x3, MAX(CASE WHEN numbers = 4 THEN value ELSE NULL END) x4 FROM dat1 GROUP BY name') 

आधार आर aggregate कार्य का उपयोग करना:

 aggregate(value ~ name, dat1, paste) # name value.1 value.2 value.3 value.4 #1 firstName 0.4145 -0.4747 0.0659 -0.5024 #2 secondName -0.8259 0.1669 -0.8962 0.1681