r - Unstacking a stacked dataframe unstacks columns in a different order -
आर 3.1.0 का प्रयोग
a = as.data.frame (do.call (Cbind, lapply (1: 100, फ़ंक्शन (x) {c (1,2,3)})) b = अनस्टैक (स्टैक (ए)) # वापसी सभी गलत (colnames (a) == colnames (b) ) स्टैक / अनस्टैक पर प्रलेखन कहते हैं कि अनस्टैकिंग को "यह [स्टैक] ऑपरेशन रिवर्स" करना चाहिए। क्या मैं कुछ भूल रहा हूँ?
कॉलम की अंतिम कुछ पंक्तियाँ मुझे पुन: आदेशित करने की आवश्यकता क्यों है? > ढेर ( utils ::: stack.data.frame ) फ़ंक्शन दो कॉलम, "मान" और "इंडस्ट्रीज़" के साथ एक data.frame बनाएं। "इंड" कॉलम कोड के साथ बनाया गया है: इंडस्ट्रीज़ = कारक (rep.int (नाम (x), लप्पली (एक्स, लम्बाई))) लेकिन, सामान्य रूप में कैसे काम करता है ("स्तर" के आदेश पर ध्यान दें)
कारक (c (1, 2, 3, 10, 4)) # [1] 1 2 3 10 4 # स्तर: 1 2 3 4 10 कारक (पेस्ट0 ("ए", सी (1, 2, 3, 10, 4))) # [1] A1 A2 A3 A10 A4 # स्तर: A1 A10 A2 A3 ए 4
यदि आपके द्वारा वर्णित कार्यक्षमता आपके विश्लेषण के लिए महत्वपूर्ण है, तो आप stack के संस्करण को बेहतर ढंग से संशोधित कर सकते हैं फैक्टरिंग प्रक्रिया के दौरान data.frame नामों का क्रम कैप्चर करने के लिए .data.frame पर क्लिक करें। स्टैक & lt; - function (x , का चयन करें, ...) {यदि (लापता (चयन)) {nl & lt; - as.list (1L: ncol (x)) नाम (nl) & lt; - नाम (x) vars & lt; - eval (विकल्प) (चयन करें), nl, parent.frame ()) x & lt; - x [, vars, drop = FALSE]} रखो & lt; - सूची (lapply (x, is.vector)) अगर (! sum (keep)) stop ("कोई वेक्टर कॉलम नहीं चुने गए थे") यदि (! सभी (रखना)) चेतावनी ("गैर- वेक्टर कॉलम को नजरअंदाज किया जाएगा ") x & lt; - x [, रखने, ड्रॉप = FALSE] data.frame (values = unlist (unname (x)), # इसे हटाएं - & gt; ind = factor (rep.int (names (x), lapply (x, लंबाई)), # और इसमें जोड़ें: इंडस्ट्रीज़ = फैक्टर (rep.int (names (x), lapply (x, लंबाई)), अद्वितीय ( नाम (एक्स))), स्ट्रिंग्सफैक्टर = FALSE)}
परीक्षण, एक, दो, तीन ...
## का उपयोग नहीं यहां समान है क्योंकि ## कारक का स्तर सभी। बराबर (स्टैक (ए), स्टैक (ए)) # [1] TRUE समान (अनस्टैक (स्टैक (ए)), ए) # [1] TRUE
Comments
Post a Comment