2015-06-30 6 views
5

के रूप में परिवर्तनीय ले सकता है tidyr का स्प्रेड फ़ंक्शन केवल उद्धरण के बिना कॉलम नाम लेता है। वहाँ एक तरह से मैं एक चर में पारित कर सकते हैं उदाहरण के लिए स्तंभ नाम जिसमें हैटिडिर फैल फ़ंक्शन एक चुनिंदा कॉलम

# example using gather() 
library("tidyr") 
dummy.data <- data.frame("a" = letters[1:25], "B" = LETTERS[1:5], "x" = c(1:25)) 
dummy.data 
var = "x" 
dummy.data %>% gather(key, value, var) 

यह एक त्रुटि

Error: All select() inputs must resolve to integer column positions. 
The following do not: 
* var 

कौन से मिलान समारोह का उपयोग कर हल किया जाता है जो आवश्यक स्तंभ स्थिति

देता है देता है
dummy.data %>% gather(key, value, match(var, names(.))) 

लेकिन यह वही दृष्टिकोण स्प्रेड फ़ंक्शन

के लिए काम नहीं करता है
dummy.data %>% spread(a, match(var, names(.))) 
Error: Invalid column specification 

इकट्ठा और फैलाने के कार्यों में विभिन्न कॉलम विनिर्देश लेते हैं। इकट्ठा आप मानक के मूल्यांकन का उपयोग करने के लिए आप gather_ या spread_

उपयोग करने की आवश्यकता इन 2 देना ही परिणाम चाहते हैं, जबकि प्रसार यह क्या चाहता है

+0

नोटिस कि प्रसार केवल एक मान कॉलम स्वीकार करता है। यदि आप एकाधिक कॉलम फैलाना चाहते हैं, तो आपको उन्हें एक ही में बदलना चाहिए (उन्हें पेस्ट करें), और बाद में उन्हें फैलाएं। – dalloliogm

+4

शायद आप 'spread_' चाहते हैं? हालांकि, यह कुंजी और मूल्य कॉलम दोनों के लिए तार लेता है। – aosmith

उत्तर

1

का उल्लेख नहीं है एक स्तंभ अनुक्रमणिका लेता

dummy.data %>% gather_("key", "value", var) 
dummy.data %>% gather(key, value, match(var, names(.))) 

और यह काम करता है:

dummy.data %>% spread_("a",var) 
# B a b c d e f g h i j k l m n o p q r s t u v w x y 
# 1 A 1 NA NA NA NA 6 NA NA NA NA 11 NA NA NA NA 16 NA NA NA NA 21 NA NA NA NA 
# 2 B NA 2 NA NA NA NA 7 NA NA NA NA 12 NA NA NA NA 17 NA NA NA NA 22 NA NA NA 
# 3 C NA NA 3 NA NA NA NA 8 NA NA NA NA 13 NA NA NA NA 18 NA NA NA NA 23 NA NA 
# 4 D NA NA NA 4 NA NA NA NA 9 NA NA NA NA 14 NA NA NA NA 19 NA NA NA NA 24 NA 
# 5 E NA NA NA NA 5 NA NA NA NA 10 NA NA NA NA 15 NA NA NA NA 20 NA NA NA NA 25 
संबंधित मुद्दे