R में चौड़े और लंबे प्रारूप के बीच डेटा कैसे बदलें? [बन्द है]


32

आपके पास विस्तृत प्रारूप या लंबे प्रारूप में डेटा हो सकता है। यह काफी महत्वपूर्ण बात है, क्योंकि प्रयोग करने योग्य विधियां प्रारूप के आधार पर भिन्न होती हैं। मुझे पता है कि आपको रिशेप पैकेज से melt()और साथ काम करना cast()होगा, लेकिन कुछ चीजें हैं जो मुझे नहीं मिलती हैं।

क्या कोई मुझे संक्षिप्त अवलोकन दे सकता है कि आप यह कैसे करते हैं?


आप क्या हासिल करना चाहते हैं, इसका उदाहरण प्रदान करें। वास्तव में आपको क्या नहीं मिलता है?
mpiktas

3
यहाँ मेरे ब्लॉग पोस्ट का उपयोग करने के उदाहरण के साथ meltऔर है cast। एक चरण में व्यापक से लेकर लंबे प्रारूप में रूपांतरण किया जाता है। वास्तव में कुछ ज्यादा खास नहीं है।
mpiktas

आँकड़ों में आपका स्वागत है। आपको लगता है कि यह आपके प्रश्न में एक छोटा, प्रतिलिपि प्रस्तुत करने योग्य डेटासेट शामिल करने में मदद करता है कि आप क्या चाहते हैं। अधिक के लिए sigmafield.org/2011/01/18/… पढ़ें ।
पॉलहर्लुक

ऐसा करने के कई तरीकों के लिए यह SO प्रश्न देखें ।
एक्समैन

जवाबों:


26

पैकेज (अब कहा जाता है ) के लिए हैडली विकम की वेबसाइट पर कई संसाधन हैं reshape2, जिसमें जर्नल ऑफ सांख्यिकीय सॉफ्टवेयर में पैकेज पर एक पेपर के लिए लिंक भी शामिल है ।

यहाँ कागज से एक संक्षिप्त उदाहरण है:

> require(reshape2)
Loading required package: reshape2
> data(smiths)
> smiths
     subject time age weight height
1 John Smith    1  33     90   1.87
2 Mary Smith    1  NA     NA   1.54

हम ध्यान दें कि डेटा विस्तृत रूप में हैं। लंबे रूप में जाने के लिए, हम smithsडेटा फ्रेम को पिघला देते हैं :

> melt(smiths)
Using subject as id variables
     subject variable value
1 John Smith     time  1.00
2 Mary Smith     time  1.00
3 John Smith      age 33.00
4 Mary Smith      age    NA
5 John Smith   weight 90.00
6 Mary Smith   weight    NA
7 John Smith   height  1.87
8 Mary Smith   height  1.54

ध्यान दें कि melt()किसी एक चर को आईडी के रूप में कैसे चुना जाता है, लेकिन हम स्पष्ट रूप से बता सकते हैं कि तर्क के माध्यम से कौन सा उपयोग करना है 'id':

> melt(smiths, id = "subject")
     subject variable value
1 John Smith     time  1.00
2 Mary Smith     time  1.00
3 John Smith      age 33.00
4 Mary Smith      age    NA
5 John Smith   weight 90.00
6 Mary Smith   weight    NA
7 John Smith   height  1.87
8 Mary Smith   height  1.54

यहाँ से एक और उदाहरण है ?cast:

#Air quality example
names(airquality) <- tolower(names(airquality))
aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)

यदि हम पिघले हुए डेटा फ्रेम को स्टोर करते हैं, तो हम अन्य रूपों में डाल सकते हैं। reshape(कहा जाता है reshape2) के नए संस्करण में फ़ंक्शंस हैं acast()और dcast()एक सरणी-जैसे (सरणी, मैट्रिक्स, वेक्टर) परिणाम या क्रमशः एक डेटा फ़्रेम लौटाते हैं। mean()पिघले हुए रूप में डेटा के सारांश प्रदान करने के लिए ये फ़ंक्शन एक समग्र फ़ंक्शन (जैसे ) भी लेते हैं । उदाहरण के लिए, ऊपर दिए गए वायु गुणवत्ता उदाहरण से निम्नलिखित, हम डेटा सेट में चर के लिए विस्तृत रूप, मासिक औसत मान उत्पन्न कर सकते हैं:

> dcast(aqm, month ~ variable, mean)
  month    ozone  solar.r      wind     temp
1     5 23.61538 181.2963 11.622581 65.54839
2     6 29.44444 190.1667 10.266667 79.10000
3     7 59.11538 216.4839  8.941935 83.90323
4     8 59.96154 171.8571  8.793548 83.96774
5     9 31.44828 167.4333 10.180000 76.90000

वास्तव में केवल दो मुख्य कार्य हैं reshape2: melt()और acast()और dcast()बाँधना। इन दो कार्यों के लिए मदद पृष्ठों में उदाहरण देखें, हेडली की वेबसाइट (ऊपर लिंक) देखें और मेरे द्वारा बताए गए पेपर को देखें। आपको इस तरह से प्रारंभ करवाया जाना चाहिए।

आप हैडली के plyrपैकेज पर भी गौर कर सकते हैं जो इसी तरह की चीजें करता है reshape2लेकिन इसके अलावा पूरी तरह से बहुत कुछ करने के लिए डिज़ाइन किया गया है।


dcast(aqm, month ~ variable), यह समुच्चय समारोह के बिना क्या करेगा?
QED

@CravingSpirit यह प्रत्येक चर के लिए टिप्पणियों की संख्या वापस आ जाएगी। पढ़ें ?dcastजिसने आपको यह बताया होगा (तर्क के लिए विवरण देखें fun.aggregate)।
मोनिका को बहाल करें - जी। सिम्पसन


7

आप का उपयोग करने की जरूरत नहीं meltहै और cast

डेटा को रीशैप करने के कई तरीके हो सकते हैं। अपने हवाला देते हैं का उपयोग करके अपनी विशिष्ट उदाहरण में recastसाथ aggregateबेमानी था क्योंकि aggregateकाम ठीक सब पर यह खुद है करता है।

aggregate(cbind(LPMVTUZ, LPMVTVC, LPMVTXC) ~ year, dtm, sum)
# or even briefer by first removing the columns you don't want to use
aggregate(. ~ year, dtm[,-2], sum)

मुझे पसंद है कि कैसे, अपने ब्लॉग पोस्ट में, आप समझाते हैं कि क्या meltकर रहा है। बहुत कम लोग इस बात को समझते हैं और एक बार जब आप इसे देख लेते हैं तो यह देखना आसान हो जाता है castकि आप कैसे काम करते हैं और यदि आप चाहें तो अपने स्वयं के कार्यों को कैसे लिख सकते हैं।



2

बस ध्यान देने वाली बात यह है कि यहाँ अधिक कुशल और व्यापक फेरबदल के तरीकों का कोई संदर्भ नहीं data.tableहै, इसलिए मैं आगे इसी तरह के प्रश्न के लिए स्टैकऑवरफ्लो पर Zach / अरुण द्वारा उत्कृष्ट उत्तर के बिना पोस्ट कर रहा हूं:

https://stackoverflow.com/questions/6902087/proper-fastest-way-to-reshape-a-data-table/6913151#6913151

और विशेष रूप से data.tableGitHub पृष्ठ पर अद्भुत विगनेट है :

https://github.com/Rdatatable/data.table/wiki/Getting-started

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.