2012-11-14 9 views
13

संभव डुप्लिकेट:
How to sort a dataframe by column(s) in Rमैं आर में दूसरे कॉलम द्वारा डेटाफ्रेम कैसे ऑर्डर कर सकता हूं?

मैं सिर्फ अगर कुछ भी मुझे बाहर मदद कर सकता है सोच रहा था, मुझे लगता है मैं क्या सोचा हल करने के लिए एक आसान समस्या नहीं होनी चाहिए है।

मैं नीचे दी गई तालिका है:

SampleID   Cluster 

R0132F041p   1 

R0132F127   1 

R0132F064   1 

R0132F068p   1 

R0132F015   2 

R0132F094   3 

R0132F105   1 

R0132F013   2 

R0132F114   1 

R0132F014   2 

R0132F039p   3 

R0132F137   1 

R0132F059   1 

R0132F138p   2 

R0132F038p   2 

और मैं नीचे के रूप में परिणाम प्राप्त करने के क्लस्टर द्वारा/यह आदेश सॉर्ट करने के लिए करना चाहते हैं:

SampleID Cluster 

R0132F041p 1 

R0132F127 1 

R0132F064 1 

R0132F068p 1 

R0132F105 1 

R0132F114 1 

R0132F137 1 

R0132F059 1 

R0132F015 2 

R0132F013 2 

R0132F014 2 

R0132F138p 2 

R0132F038p 2 

R0132F094 3 

R0132F039p 3 

मैं निम्नलिखित आर की कोशिश की है कोड:

data<-read.table('Table.txt', header=TRUE,row.names=1,sep='\t') 

data <- data.frame(data) 
data <- data[order(data$Cluster),] 
write.table(data, file = 'OrderedTable.txt', append = TRUE,quote=FALSE, sep = '\t', na ='NA', dec = '.', row.names = TRUE, col.names = FALSE) 

और निम्न आउटपुट प्राप्त करें:

1 1 

2 1 

3 1 

4 1 

5 1 

6 1 

7 1 

8 1 

9 2 

10 2 

11 2 

12 2 

13 2 

14 3 

15 3 

क्यों है SampleIDs संख्या 1-15 से बदल दिया गया और इन नंबरों क्या प्रतिनिधित्व है, मैं ?order() पेज पढ़ लिया है लेकिन इस sort.listआदेश की तुलना में बेहतर व्याख्या करने के लिए लगता है() यदि कोई इस पर मेरी मदद कर सकता है तो मैं बहुत आभारी रहूंगा।

उत्तर

10

संक्षिप्त उत्तर यह है कि आपने इसे पूरी तरह से किया है। आपको फ़ाइलों को पढ़ने और लिखने में कुछ कठिनाई हो रही है। अपने कोड के माध्यम से जा रहे हैं:

data<-read.table('Table.txt', header=TRUE,row.names=1,sep='\t') 

उपरोक्त पंक्ति अपने डेटा ठीक में पढ़ रही है, लेकिन row.names=1 पंक्तियों के लिए नामों के रूप में पहले कॉलम का उपयोग करने के यह कहा था। तो अब आपके नमूने अपने स्वयं के कॉलम होने के बजाय पंक्ति नाम हैं। यदि आप इस लाइन को चलाने के तुरंत बाद data या head(data) या str(data) टाइप करते हैं, तो यह स्पष्ट होना चाहिए। बस उस पंक्ति को हटा दें। नाम तर्क और यह ठीक से पढ़ा जाएगा।

data <- data.frame(data) 

आप क्योंकि read.table() एक dataframe पैदा करता है इस से ऊपर लाइन की जरूरत नहीं है। आप str(data) के साथ भी देख सकते हैं।

data <- data[order(data$Cluster),] 

उपरोक्त रेखा सही है।

write.table(data, file = 'OrderedTable.txt', append = TRUE, 
    quote=FALSE, sep = '\t', na ='NA', dec = '.', row.names = TRUE, 
    col.names = FALSE) 

यहाँ आप तर्क col.names = FALSE जिसके कारण आपकी फ़ाइल स्तंभ नाम नहीं है शामिल थे। आपको append=TRUE की आवश्यकता नहीं है/चाहिए। यदि आप help(write.table) देखते हैं, तो आप देखते हैं कि यह "केवल एक वर्ण है यदि फ़ाइल एक वर्ण स्ट्रिंग है"। यहां लगता है कि आखिरी पंक्ति को समाप्त किए बिना फ़ाइल लिखना प्रतीत होता है, जो किसी भी बाद में read.table() शिकायत करने का कारण बनता है।

आपके परिणाम में संख्या 1-15 पंक्ति संख्याओं की तरह दिखता है। आप समझ नहीं पाते कि आप परिणामी फ़ाइल को कैसे देखते हैं, इसलिए मैं सुनिश्चित नहीं हो सकता। आप संभवतः अपनी फ़ाइल को ऐसे तरीके से पढ़ते हैं जो row.names को पार्स नहीं करता है और इसके बजाय पंक्ति संख्या दिखा रहा है। यदि आप सुनिश्चित करते हैं कि आपके नमूना कॉलम पंक्तियों के नाम होने के लिए असाइन नहीं किया गया है, तो आप शायद ठीक होंगे।

+0

आपको बहुत धन्यवाद, Thats पूरी तरह से काम कर रहा है, और वास्तव में अच्छी तरह से समझाया गया था, आप एक स्टार हैं। – sinead

5

plyr पैकेज के arrange फ़ंक्शन पर नज़र डालें।

arrange(data, Cluster) 
write.table(data, "ordered_data.txt") 
+1

सुझाव के लिए धन्यवाद एक मिल, मैं इस प्लीयर पैकेज और इस समारोह पर एक नज़र डालेगा। उपयोगी – sinead

+0

तेज, सरल, बेहतर हो सकता है। – linello

संबंधित मुद्दे