2015-09-14 16 views
5

में डेटाफ्रेम कॉलम का केवल एक सबसेट का चयन कैसे करें मेरे पास कॉलम 1, कॉलम 2 ... कॉलम 100 का कई कॉलम का डेटाफ्रेम है। मैं कॉलम का केवल एक सबसेट कैसे चुनूं उदाहरण के लिए (कॉलम 1 नहीं) सभी कॉलम कॉलम 2 ... कॉलम 100 वापस करना चाहिए।जूलिया

data[[colnames(data) .!= "column1"]]) 

काम नहीं कर रहा है।

मैं डेटाफ्रेम को म्यूटेट नहीं करना चाहता हूं। मैं सिर्फ सभी स्तंभों कि मेरे उदाहरण की तरह एक विशेष कॉलम नाम नहीं है

उत्तर

6

@Reza Afzalan के रूप में, आप जो करने की कोशिश कर रहे हैं वह तारों की एक सरणी देता है, जबकि डेटाफ्रेम में कॉलम नाम प्रतीकों हैं।

यह देखते हुए कि जूलिया सशर्त सूची समझ नहीं है, सबसे अच्छी बात आप कर सकता है मुझे लगता है कि होगा

data[:, filter(x -> x != :column1, names(df))] 

यह (यह परिवर्तनशील) के बिना आप डेटा स्तंभ 1 हटाया के साथ सेट दे देंगे। साथ ही आप के नाम की सूची के खिलाफ जाँच करने के लिए इस का विस्तार कर सकते हैं:

data[:, filter(x -> !(x in [:column1,:column2]), names(df))] 
+0

[डॉक्स] (http://juliastats.github.io/DataFrames.jl/subsets/) चयन के रूप में नाम का एक सेट का उपयोग कर उल्लेख करते हैं, हालांकि इस तरह के एक सेट को परिभाषित करने के तरीकों पर बहुत गहराई से मत जाओ –

2

colnames(data) .!= "column1" # चयन करना चाहते हैं => bool की एक सरणी देता है

मुझे लगता है कि सही तरीके से एक फिल्टर समारोह का उपयोग करने के लिए है कि रिटर्न वांछित स्तंभ नाम

filter(x->x != "column1", colnames(data)) # => स्ट्रिंग की एक सरणी

DataFrame स्तंभ नाम प्रतीक डेटाप्रकार के हैं रिटर्न

map(symbol ,str_array_of_filterd_column_names) # => समान प्रतीकों की सरणी