2013-06-03 6 views
6

मेरे पास एक स्क्रिप्ट है जिसके लिए reshape और reshape2 लाइब्रेरी दोनों की आवश्यकता है। मुझे पता है कि यह खराब अभ्यास है, लेकिन मुझे लगता है कि plyr (या एक और लाइब्रेरी जिसका मैं उपयोग कर रहा हूं) Vennerablereshape लोड हो रहा है और मैंने कई स्थानों पर व्यक्तिगत रूप से reshape2 का उपयोग किया है।कॉलम नामकरण से पिघलने से रोकने वाले पैकेज मास्किंग को रीशेप करें

समस्या यह है कि reshape द्वारा reshape2 की मास्किंग melt समारोह

# Example data frame 
df <- data.frame(id=c(1:5), a=c(rnorm(5)), b=c(rnorm(5))) 

# With just reshape2, variable and value columns are labelled correctly 
library(reshape2) 
melt(df, measure.vars=c("a", "b"), variable.name="type", value.name="distance") 
    id type distance 
1 1 a -2.0233666 
2 2 a 0.4625188 
3 3 a -2.8688127 
4 4 a 0.8151644 
5 5 a -0.4574464 
6 1 b 1.3197784 
7 2 b 1.6213146 
8 3 b 1.3508913 
9 4 b -1.6483839 
10 5 b -1.1342157 

# But my script also has reshape loaded 
library(reshape) 
Loading required package: plyr 

Attaching package: ‘reshape’ 

The following object(s) are masked from ‘package:plyr’: 

    rename, round_any 

The following object(s) are masked from ‘package:reshape2’: 

    colsplit, melt, recast 

# When calling melt in this environment, variable and value columns stick to 
# their default names 
melt(df, measure.vars=c("a", "b"), variable.name="type", value.name="distance") 
    id variable  value 
1 1  a -2.0233666 
2 2  a 0.4625188 
3 3  a -2.8688127 
4 4  a 0.8151644 
5 5  a -0.4574464 
6 1  b 1.3197784 
7 2  b 1.6213146 
8 3  b 1.3508913 
9 4  b -1.6483839 
10 5  b -1.1342157 

मैंने सोचा कि मैं विशेष रूप से reshape2::melt का उपयोग कर reshape2 से melt कह सकते हैं लेकिन मैं अभी भी एक ही समस्या मिल के लिए समस्याएं खड़ी कर रहा है है।

क्या इसके आसपास कोई आसान तरीका है? यदि नहीं, तो मुझे प्रत्येक पिघला हुआ कॉल के बाद सीधे कॉलम नामों को मैन्युअल रूप से लेबल करना होगा।

+1

मुझे नहीं लगता कि 'plyr' के नवीनतम संस्करण का उपयोग करता है' अब reshape'। क्या यही कारण है कि आप 'रीशेप' आयात कर रहे थे? – Peyton

+0

मैं इसे व्यक्तिगत रूप से आयात नहीं करता हूं, लेकिन मुझे लगता है कि एक और लाइब्रेरी है और मैं काम नहीं कर सकता। मुझे संदेह था कि यह आउटपुट के आदेश के कारण प्लीयर था। – MattLBeck

+1

इस तरह के प्रत्येक पैकेज की जांच करें: 'install.packages() [install.packages() [, 1] ==" ggplot2 ",]' – Roland

उत्तर

7

reshape2:::melt.data.frame(...) का उपयोग करें।

> reshape2::melt 
function (data, ..., na.rm = FALSE, value.name = "value") 
{ 
    UseMethod("melt", data) 
} 
<environment: namespace:reshape2> 

तो, एक डेटा फ्रेम के मामले में, आर melt.data.frame के लिए खोज करेंगे, जो reshape में है:

melt वास्तव में एक विधि है

> melt.data.frame 
function (data, id.vars, measure.vars, variable_name = "variable", 
    na.rm = !preserve.na, preserve.na = TRUE, ...) 
{ 
    ... 
} 
<environment: namespace:reshape> 

जैसा कि मैंने हालांकि संकेत दिया, सबसे अच्छा समाधान बस सबकुछ अपग्रेड करना हो सकता है। यह सच है कि plyr reshape लोड करने के लिए उपयोग किया जाता था, लेकिन यह अब और नहीं है। (संपादित करें: मैं ggplot2 सोच रहा था।)

+0

आह, शानदार। मैं 'reshape2 :: melt.data.frame (...)' भी कोशिश कर रहा था, लेकिन मुझे पता नहीं था कि मुझे तीन कोलों की आवश्यकता है (यह शिकायत कर रहा था कि 'melt.data.frame' अन्यथा निर्यात नहीं किया गया था)। इसके अलावा, उन्नयन टिप के लिए चीयर्स। – MattLBeck

+1

हां, ट्रिपल कोलन ऑपरेटर आंतरिक (यानी निर्यात नहीं किया गया) मान लेगा। – Peyton

+0

अपने डेटासेट के लिए उपयुक्त फॉर्म निर्दिष्ट करना सुनिश्चित करें, इस मामले में melt.data.frame, लेकिन अन्य रूपों में शामिल हैं: melt.array, melt.list, melt.matrix, melt.table और melt.default (वैक्टर के लिए) – woodvi

0

आकृति बदलें पैकेज उतारने और यह फिर से लोड करने पर फिर से विचार जब आवश्यक

detach("package:reshape", unload=TRUE) 
संबंधित मुद्दे